首先要做的事情是:我使用的是Tomcat 8.0和Hibernate 5.2.8。如果需要让它发挥作用,我实际上不能替代那些。
我得到的错误是:“java.lang.UnsupportedOperationException:BasicDataSource不支持”
到目前为止我发现:由于DatasourceConnectionProviderImpl.getConnection的更改,似乎发生了错误(我不是100%肯定),其中“getConnection(用户名,密码”是“已删除”(实际上,它只是抛出)这个错误)。
但是这里是捕获,即使我不传输任何参数,我得到这个例外。我试图制作我自己的“javax.sql.DataSource”接口来克服这个问题,但这也没有帮助。
另一件事:JDBC工作正常,唯一的问题是休眠。
跟进上下文,网络和班级信息:
背景:
<Resource name="jdbc/basic"
global="jdbc/basic"
auth="Container"
type="javax.sql.DataSource"
maxActive="10"
maxIdle="20"
maxWait="10000"
username="root"
password="1"
driverClassName="com.mysql.jdbc.Driver"
testOnBorrow="true"
url="jdbc:mysql://localhost/javatest"
/>
Web:
<resource-ref>
<description>JNDI MYSql JDBC Connection</description>
<res-ref-name>jdbc/basic</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
代码:
public TestClass() {
try {
Connection jdbc = ((javax.sql.DataSource) new InitialContext().lookup("java:comp/env/jdbc/basic")).getConnection();
System.out.println(new Configuration().configure("managedbeans/hibernate.cfg.xml").buildSessionFactory().openSession().createQuery("Select * from Testdata").list().size());
} catch (Exception e) {
e.printStackTrace();
}
}
如果需要更多信息,我很乐意提供
伊迪丝:
如要求:
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.datasource">java:comp/env/jdbc/basic</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">true</property>
<property name="current_session_context_class">thread</property>
<property name="hbm2ddl.auto">update</property>
<property name="hibernate.max_fetch_depth">3</property>
<!-- Mapped annotated entity-->
<mapping class="managedbean.TestPojo"/>
</session-factory>
</hibernate-configuration>
答案 0 :(得分:1)
可能与此处提到的相同:tomcat-connection-pooling-java-lang-unsupportedoperationexception-not-support
其中一个答案摘要:
如果hibernate确实在类路径中找到属性hibernate.connection.username
或/和hibernate.connection.password
,则它使用不推荐使用的getConnection(user,password)
方法。