java - 使用 Tomcat 8.0 配置 JPA(Hibernate)

标签 java hibernate tomcat jpa provider

我在使用 Hibernate 作为 Eclipse 中的提供程序使用 JPA 配置 Tomcat 8.0 时遇到问题。 当我尝试使用 DataSource Annotation 和标准 JDBC 方式连接到 DB 时,连接正常,但是当我尝试使用 Hibernate 时,我得到一个异常,关于我的 PU 没有提供程序。我试图将 hibernate 库移动到许多目录(web-inf/lib、apache TC 库),但我仍然遇到相同的异常。我认为数据源配置正确。 下面我添加我配置的文件。

网络.xml

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>HibernateTest</display-name> <resource-ref> <description>DB Connection</description> <res-ref-name>jdbc/HibernateTest</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>/faces/*</url-pattern> </servlet-mapping> <context-param> <description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description> <param-name>javax.faces.STATE_SAVING_METHOD</param-name> <param-value>client</param-value> </context-param> <context-param> <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name> <param-value>resources.application</param-value> </context-param> <listener> <listener-class>com.sun.faces.config.ConfigureListener</listener-class> </listener> </web-app>

持久性.xml

<?xml version="1.0" encoding="UTF-8"?> <persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"> <persistence-unit name="HibernateTest" transaction-type="JTA"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <jta-data-source>jdbc/HibernateTest</jta-data-source> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/> <property name="hibernate.hbm2ddl.auto" value="create-drop" /> </properties> </persistence-unit> </persistence> tomcat中的context.xml(只有片段)

<WatchedResource>WEB-INF/web.xml</WatchedResource> <Resource name="jdbc/HibernateTest" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="admin" password="admin" driverClassName="org.postgresql.Driver" url="jdbc:postgresql://localhost:5432/Hibernate"/> <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>

public TestServlet() {
    super();
    // TODO Auto-generated constructor stub
}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("HibernateTest");
    EntityManager em = emf.createEntityManager();

    em.close();
    emf.close();

}

} `

最佳答案

由于 Tomcat 是一个 servlet 容器(与成熟的 J2EE 应用程序服务器相对),JTA 并未随附。如果您想在 Tomcat 中使用 JTA,则必须加入您选择的实现。

关于java - 使用 Tomcat 8.0 配置 JPA(Hibernate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35370658/

相关文章:

java - 通过整个项目将 float 替换为 double

java - Hibernate:未能延迟初始化角色集合,没有 session 或 session 已关闭

java - 调用 SessionFactory.getCurrentSesion() 时会发生什么

java - 尝试部署旧的 Liferay Portal 版本

google-app-engine - Spring Boot 和云部署

java - 使用 apache cxf 发布表单

java - 从 JFrame 中动态创建的变量获取数据

部署服务器时未更新 Java spring 资源

java - 'protected' 和 'protected-static' 变量有什么区别?

java - hibernate和Spring boot的问题