这几天我一直在研究这个问题,但没有解决方案。我希望在这里发布我的问题将引导我朝着正确的方向前进。我浏览了许多论坛,并且都说明了我遵循的相同步骤(如下所述),但在访问数据源时仍然遇到相同的运行时异常。
Exception -
org.hibernate.exception.SQLGrammarException: Could not open connection
at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:122)
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
Caused by: java.sql.SQLNonTransientException: [jcc][t4][10205][11234][4.11.88] Null userid is not supported. ERRORCODE=-4461, SQLSTATE=42815 DSRA0010E: SQL-Status = 42815, Fehlercode = -4'461
at com.ibm.db2.jcc.am.gd.a(gd.java:676)
环境 - Hibernate、JPA 2.0、DB2、Websphere 8.0、RAD、Java EE 6 部署网络。
在 Websphere JDBC/Sample 上创建了一个数据源。使用 DataSource 上的 DB 凭据创建了 J2C 身份验证。通过容器管理的身份验证将身份验证分配给数据源。
Web.xml 条目
resource-ref res-ref-name Sample res-type javax.sql.DataSource res-auth Container res-sharing-scope Shareable resource-ref
ibm-web-bnd.xml 条目
resource-ref name="jdbc/Sample" binding-name="java:comp/env/jdbc/Sample"
持久性.xml
persistence-unit name="samplePool" transaction-type="JTA" provider org.hibernate.ejb.HibernatePersistence jta-data-source jdbc/Sample properties property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.WebSphereExtendedJTATransactionLookup" property name="hibernate.dialect" value="org.hibernate.dialect.DB2390Dialect" properties persistence-unit persistence
Dao 中的代码
eMgrFactory = Persistence.createEntityManagerFactory("samplePool"); entityMgr = eMgrFactory.createEntityManager(); entityMgr.createNativeQuery();
请注意,通过管理控制台创建数据源后,我能够成功测试连接。另请注意,如果我指定组件托管身份验证我能够通过代码访问。建议我如何通过 Container Managed 身份验证进行访问。