我正在使用tomcat连接池,jpa,hibernate模式。如果我尝试使用以下命令在tomcat的context.xml中创建的数据源工作正常:
source = (DataSource) ((Context) c.lookup("java:comp/env")).lookup("jdbc/kids");
但是如果我在persistence.xml中指定此jndi数据源
<persistence-unit name="kids-tomcat" transaction-type="JTA"> <jta-data-source>jdbc/kids</jta-data-source> </persistence-unit>
我收到以下异常:org.hibernate.service.jndi.JndiException:无法查找JNDI名称[jdbc / kids]
知道为什么会发生!
在我指定了以下属性之后,它终于在今天工作了。.因为仅提及数据源还不够;我们需要指定一些属性,例如要使用的方言。如果我们指定数据源;我们不需要指定用户名,数据库的密码url(因为所有这些都是在数据源配置本身中指定的)。
最重要的一点是您指定数据源的方式。它应该是完整的路径:java:/ comp / env / jdbc / kids。 所有这些,而我在comp之前就缺少了斜线。
<persistence-unit name="kids" transaction-type="RESOURCE_LOCAL"> <non-jta-data-source>java:/comp/env/jdbc/kids</non-jta-data-source> <class>com.kids.domain.User</class> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/> <property name="connection.autocommit" value="false"/> <property name="hibernate.hbm2ddl.auto" value="create"/> <property name="hibernate.show_sql" value="true"/> </properties> </persistence-unit>