18

我们正在尝试从 Hibernate 3.6.7 升级到 4.1.2 和 Hibernate Tools 3.2.0 到 3.5.0

我们使用 Ant 生成数据库创建脚本:

     <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?(和哪一个?)

4

2 回答 2

61

我遇到了类似的问题,特别是导致“解析 JNDI 名称时出错”,只需从 session-factory 标记中删除空名称属性即可轻松解决。

我的 hibernate.cfg.xml 有

<session-factory name="">

这是自动生成的,所以我只是删除了name属性。

此修复程序在这里找到:https ://forum.hibernate.org/viewtopic.php?f=1&t=1014760

于 2012-11-06T16:05:38.420 回答
3

问题来自您的休眠工具,您已将休眠工具配置为使用具有通过 JNDI 配置的 jta 数据源的持久性单元。为了让 ant 任务与 JNDI 对话,它需要命名工厂 url 和提供者。使用配置数据源的应用程序服务器的命名工厂类。

希望能帮助到你。

于 2012-11-06T17:09:49.733 回答