Hibernate 3.6.7から4.1.2に、Hibernate Tools3.2.0から3.5.0にアップグレードしようとしています。
Antを使用してDB作成スクリプトを生成します。
<hibernatetool destdir="${target}">
<jpaconfiguration persistenceunit="stdcmpOrderPersistenceUnit" propertyfile="@{propertyfile}"/>
<classpath refid="@{classpathid}"/>
<!-- the file name is relative to $destdir -->
<hbm2ddl outputfilename="@{output}" format="true" export="false" drop="false"/>
</hibernatetool>
永続化ユニットは次のようになります。
<persistence-unit name="stdcmpOrderPersistenceUnit" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>jdbc/lakshmi_stdcmp</jta-data-source>
<mapping-file>META-INF/stdcmpOrderNamedQueries.xml</mapping-file>
<class>ch.ethz.id.wai.lakshmi.stdcmp.persistency.PersistentOrder</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="hibernate.show_sql" value="false"/>
<property name="hibernate.format_sql" value="false"/>
</properties>
</persistence-unit>
アップグレード後、次のエラーが発生します。
[hibernatetool] org.hibernate.service.jndi.JndiException: Error parsing JNDI name [jdbc/lakshmi_stdcmp]
[hibernatetool] javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: Java.naming.factory.initial
PersistenceUnitのすべての情報が利用できるのに、HibernateがJNDI名を解決しようとするのはなぜですか?古いバージョンでは問題ありませんでした。
とにかく、NamingFactoryをどのように指定できますか? (そしてどれ?)
問題は、休止状態ツールにあります。JNDIを介して構成されたjtaデータソースを持つ永続化ユニットを使用するように休止状態ツールを構成しました。 antタスクがJNDIと通信するには、ファクトリのURLとプロバイダーに名前を付ける必要があります。データソースが構成されているアプリケーションサーバーのネーミングファクトリクラスを使用します。
それが役に立てば幸い。
同様の問題が発生し、特に「JNDI名の解析エラー」が発生しました。これは、セッションファクトリタグから空のname属性を削除するだけで簡単に修正されました。
私のhibernate.cfg.xmlには
<session-factory name="">
これは自動生成されたので、name
属性を削除しました。
この修正はここで見つかりました: https://forum.hibernate.org/viewtopic.php?f=1&t=101476