在使用到jpa 的开发过程中,有时会用到数据源转换的问题,
以下方法只是我个人遇到的一种情况及解决方法,如有不同的情况,请大家贴出来供大家参考
tomcat启动时遇到:
Hibernate Dialect must be explicitly set 解决方法
错误提示:没有设置数据库方言(dialect)
persistence.xml
<persistence-unit name="GameInfoPU"
transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>com.business.userPass</class>
</persistence-unit>
</persistence>
//Tomcat数据源配置
<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<!--配置数据源-->
<Resource auth="Container" driverClassName="com.mysql.jdbc.Driver" maxActive="20" maxIdle="2" maxWait="5000" name="hibernate/mysql" password="admin" type="javax.sql.DataSource" url="jdbc:mysql://localhost:3306/dbcurr" username="root" />
</Context>
此时的配置启动时会出现:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: org.hibernate.HibernateException: Hibernate Dialect must be explicitly set
解决方法: 修改persistence.xml文件为如下:
persistence.xml
<persistence-unit name="userPassPU"
transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider> //默认jpa本身数据源
<non-jta-data-source>java:comp/env/hibernate/mysql</non-jta-data-source> // 设置数据库方言,默认去找tomcat数据源
<class>com.business.userPass</class> //实体类,表
</persistence-unit>
</persistence>
默认jpa本身数据源 tomcat数据源 不能同时都配置,否则出错,冲突
以上方法只是我个人遇到的一种情况及解决方法,如有不同的情况,请大家贴出来供大家参考