1

我使用 Java EE 7 和 Hibernate 4.2.2 和 Glassfish 4 做了一个小型测试项目。

这是我的 pom.xml (网络)

 <dependencies>        
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-web-api</artifactId>
        <version>7.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>br.com.myproject</groupId>
        <artifactId>escola-ejb</artifactId>
        <version>1.0</version>
    </dependency>
</dependencies>

ejb

<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>7.0</version>
    <scope>provided</scope>
</dependency>
<!--Hibernate-->     
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>4.2.2.Final</version>
    <scope>compile</scope>
</dependency>

<dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>4.2.2.Final</version>
        <scope>compile</scope>
</dependency>

它只有一个名为 Student 的实体。还有一些带有列表、创建和编辑的杂乱页面。我可以编译和部署,但是当我尝试打开列表列表页面(由 netbeans 7.3.1 生成的所有页面,带有从实体模型生成 JSF 页面的选项)时,我收到了一个错误:

A system exception occurred during an invocation on EJB StudentFacade, method: public java.util.List br.com.myproject.ejb.facade.AbstractFacade.findRange(int[]).
at com.sun.ejb.containers.EJBContainerTransactionManager.processSystemException(EJBContainerTransactionManager.java:748)
    at com.sun.ejb.containers.EJBContainerTransactionManager.completeNewTx(EJBContainerTransactionManager.java:698)
    at com.sun.ejb.containers.EJBContainerTransactionManager.postInvokeTx(EJBContainerTransactionManager.java:503)
    at com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4475)
    at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2009)
    at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1979)
    at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:220)
    at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:88)

(...)

如果我将 persistence.xml 更改为 Eclipse 链接,它可以正常工作。但是我回滚到休眠状态。我得到了这个错误。

我用谷歌搜索了很多,但我找不到任何信息,因为 Java EE 7 是一项新技术。

4

2 回答 2

2

Hibernate 4.2.2 与 JPA 2.0 兼容。Glassfish 4 和 EE 7 附带 JPA 2.1。为此,您需要 Hibernate 4.3.0.Beta1 或更高版本。

它可能适用于早期版本的 Hibernate,但您很可能会遇到问题。我建议等到他们发布 Hibernate 的 4.3 最终版本。

于 2013-09-27T06:00:15.343 回答
1

简单地将 Hibernate 作为依赖项添加到您的应用程序是行不通的。您要么必须将 Hibernate JAR 添加到 GlassFish 的服务器类路径(在这种情况下,Hibernate 将作为所有应用程序的 JPA 提供程序),或者将 Hibernate JAR 捆绑在 EAR 的 lib 目录中(在这种情况下,只有该应用程序可以使用休眠)。有关后一种情况的示例,请参阅此博客:http: //javafromthetrenches.wordpress.com/2011/01/15/using-hibernate-jpa-with-glassfish/

您不需要做任何特别的事情来使用 JTA 和 EclipseLink(或 Hibernate)数据源。会话 bean 是自动事务性的,因此将实体管理器实例注入会话 bean 并从业务方法中使用它。

我还应该指出,如果您不使用默认的 Java DB 数据库,则需要将 JDBC 资源添加到 GlassFish。

于 2013-07-10T06:19:29.577 回答