2013-02-19 35 views
2

假設一個EJB-JAR具有以下的persistence.xml配置:有沒有一種方法來配置基於jta-data-source的Hibernate方言?

<?xml version="1.0" encoding="UTF-8"?> 
<persistence xmlns="http://java.sun.com/xml/ns/persistence" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" 
      version="2.0"> 
    <persistence-unit name="com.mystrotv.mdn.admanager.entity"> 
    <jta-data-source>/dataSource/MystroDS_Tx</jta-data-source> 
    <properties> 
     <property name="jboss.entity.manager.jndi.name" value="java:/EntityManagers/AdManagerPersistenceContext"/> 
     <property name="jboss.entity.manager.factory.jndi.name" value="java:/EntityManagers/AdManagerPersistenceUnit"/> 
     <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/> 
     <property name="hibernate.hbm2ddl.auto" value="validate"/> 
     <property name="hibernate.max_fetch_depth" value="5"/> 
     <property name="hibernate.validator.apply_to_ddl" value="false" /> 
     <property name="hibernate.validator.autoregister_listeners" value="false" /> 
    </properties> 
    </persistence-unit> 
</persistence> 

我想定義基於JTA數據源上的休眠方言。如果是oracle,我使用下面指出的方言,如果postgres,我使用不同的方言。有誰知道如何做到這一點,或可以指向我如何做到這一點的文件? Google未能提供所需的信息。該應用將部署在JBoss應用服務器上,但我也想支持其他應用服務器。此外,我們有兩個部署模型,一個使用postgres,另一個使用oracle和Id,而不必在配置文件中創建兩個Ears來支持一行差異。

在此先感謝。

回答

4

剛發佈問題後,我找到答案;

http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#portability-dialectresolver

具體地,如果未指定方言,從3.2休眠的版本應該從JTA數據源自動檢測它和因此到達正確的程序是離開方言規範關的屬性完全。

+0

Hibernate現在能夠正確自動檢測Oracle 11g與Oracle 10g嗎?我已經使用了一年多的Hibernate,但我記得至少在一年前這是一個問題。 – Olaf 2013-02-19 19:16:43

+0

我沒有親自嘗試過。通過將調試代碼放入應用程序中,以便在應用程序加載後獲取方言的類名,可以找到答案。 – 2013-03-04 14:58:41

相關問題