Ler propriedade do persistence.xml

Boa noite pessoal.

Já pesquisei bastante porém não encontrei uma resposta para a seguinte pergunta:
Como posso ler uma propriedade do arquivo “META-INF/persistence.xml”?

Tenho a seguinte propriedade

<properties>
	<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
</properties> 

e gostaria de ler o valor de “hibernate.dialect” no código Java, como posso fazer isso?

Obrigado.

Como utilizar/instanciar a interface: javax.persistence.spi.PersistenceUnitInfo?

Voce pode chamar Dialect.getDialect(), que eh um Singleton e retorna o Dialect configurado para sua aplicacao. Isso resolve o problema?
http://simoes.org/docs/hibernate-2.1/api/net/sf/hibernate/dialect/Dialect.html#getDialect()

Se voce realmente precisa pegar o valor da propriedade hibernate.dialect, voce pode usar System.getProperty("hibernate.dialect");

Bom dia…

Muito obrigado pela dica, vou fazer o teste e depois posto aqui se deu certo.
Se algo tão simples funcionar, vou ficar adimirado tanto com a facilidade quanto com o fato de não ter encontrado essa informação facilmente.

Mais uma vez, obrigado.

Fiz o teste mas não funcionou no meu caso, tenho o seguinte trecho de código que funciona como quero:

Properties pro = new Properties();
pro.setProperty("hibernate.dialect", "org.hibernate.dialect.PostgreSQLDialect");
    		
Dialect dialect = Dialect.getDialect(pro);
String select = dialect.getSequenceNextValString(sequenceName);

Porém eu gostaria de deixar dinâmico o valor da propriedade “hibernate.dialect”, pegando direto do arquivo de configuração “persistence.xml”.

Já tentei: System.getProperty("hibernate.dialect")
e Dialect dialect = Dialect.getDialect();
porém nenhum deles funcionou.

Se tiverem alguma sugestão, agradeço.

Que estranho. Confirmei ate na documentacao oficial, e isso deveria funcionar :slight_smile:
http://docs.jboss.org/hibernate/stable/core/api/org/hibernate/dialect/Dialect.html#Dialect()

Mas em todo caso, tente assim:

Session session = (Session) em.getDelegate();
SessionFactoryImplementor sf = (SessionFactoryImplementor) session.getSessionFactory();
sf.getDialect();

Nao tenho certeza se os casts sao possiveis, pq nao lembro de cabeca qual a implementacao de SessionFactory para JPA, mas acho que eh SessionFactoryImpl.
http://docs.jboss.org/hibernate/stable/core/api/org/hibernate/engine/SessionFactoryImplementor.html

Também não deu certo, vou deixar fixo no código e continuar o desenvolvimento, depois vejo isso.

Obrigado pela ajuda.

Abs

Eu testei aqui, e quando se usa JPA as propriedades nao ficam em System.properties. Mas o codigo abaixo funciona:

		EntityManager em = factory.createEntityManager();
		Session session = (Session) em.getDelegate();
		SessionFactoryImplementor sf = (SessionFactoryImplementor) session.getSessionFactory();  
		logger.info("Dialect usado: " + sf.getDialect());
		em.close();

Ele imprime: