我从 4.2.7 升级到 Hibrernate 4.3.x 时遇到问题。我得到了这个异常:
Caused by: javax.naming.NameNotFoundException: Name [java:comp/env/jdbc/data] is not bound in this Context. Unable to find [java:comp].
at org.apache.naming.NamingContext.lookup(NamingContext.java:820)
at org.apache.naming.NamingContext.lookup(NamingContext.java:154)
at javax.naming.InitialContext.lookup(InitialContext.java:415)
at org.hibernate.engine.jndi.internal.JndiServiceImpl.locate(JndiServiceImpl.java:114)
... 82 more
我正在使用 Tomcat 7.0.29(也尝试过 7.0.47)和 JDK 7 (v25)。 Hibernate 4.2.7没有问题。
这是我的 persistence.xml:
<persistence-unit name="data" transaction-type="RESOURCE_LOCAL">
<non-jta-data-source>java:comp/env/jdbc/data</non-jta-data-source>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.show_sql" value="false" />
<property name="hibernate.format_sql" value="true" />
</properties>
</persistence-unit>
但我不认为问题出在这里。我做了一些调试研究并发现了以下内容:
JndiServiceImpl#locate(String jndiName)
创建一个不同的初始上下文。
4.3.0 - org.apache.naming.NamingContext
4.2.7 - org.apache.naming.SelectorContext
除此之外,我找不到更多的不同。
我发现了一些与此问题类似的主题,但没有任何帮助。谢谢你的帮助。
是的,这实际上是有问题的,因为他们对如何session-factory
工作以及当工厂被要求连接时。
所以你需要在后面解决它session-factory
当session-factory
请求新的连接。
尝试通过老式方式解决 jndi 中的数据源由 hibernate 单独负责的问题hibernate.cfg.xml
像这样:
<hibernate-configuration>
<session-factory name="data">
<property name="connection.datasource">java:comp/env/jdbc/data</property>
...
并通过以下方式解决配置persistence.xml
像这样:
<persistence version="2.0">
<persistence-unit name="data">
<properties>
<property name="hibernate.ejb.cfgfile" value="hibernate.cfg.xml"/>
也许你的hbm2ddl
必须搬到hibernate.cfg.xml
那时也是。
玩得开心。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)