我有一个大型的非Java EE,基于JSF的Web应用程序项目。我们的系统是分层的(在源代码中):有一个数据模型包,它是DAO包的基础。我们仅在DAO包中使用Hibernate的XML配置映射。我们确实不想将数据模型与注释混淆在一起,但是我们并没有特别地将其绑定到Hibernate(除非映射非常复杂)。
我强烈考虑向Java EE迈进,并将DAO对象构建为EJB。但是由于我们不愿放弃Hibernate的XML,这使我想到了几个问题:
谢谢!
是否可以在模型上没有JPA注释的情况下将Hibernate与JPA一起使用?
是的,这很有可能。您可以在JPA标准映射文件- 中指定对象模型类的所有相关属性orm.xml。您也可以拥有自己的映射文件,但是您需要在中指定它们persistence.xml。
orm.xml
persistence.xml
如果不是,我的EJB是否有可能与Hibernate进行事务处理?我认为这称为JTA支持,但不确定。
如果您使用的是EJB,则会发现容器管理的事务非常有用。您需要做的就是用必需的@TransactionManagement和@TransactionAttribute注释为EJB 注释,容器将自动为您管理事务,包括在方法末尾提交事务(如果适用),并在事件发生时回滚事务。运行时异常或应用程序异常。
@TransactionManagement
@TransactionAttribute
EntityManager注入到此类EJB中的所有实例(即所有持久性上下文)将自动与基础JTA事务关联。请注意,仅当您允许容器注入EntityManager实例时,这才是正确的。如果您自己管理持久性上下文(通过从EntityManagerFactory实例创建持久性上下文),则可能必须调用EntityManager.joinTransaction()将持久性上下文中执行的所有工作与基础JTA事务相关联。EntityManager如果您已将持久性上下文配置为使用JTA数据源,则这通常是必要的,因为通常将其自身与基础JTA事务相关联。如果不存在JTA事务,那么将不会发生这种关联,因此,如果您想将更改刷新到数据库,则必须加入活动的JTA转换。
EntityManager
EntityManagerFactory
EntityManager.joinTransaction()
有没有办法从Hibernate的XML映射配置迁移到某种JPA XML映射?
我没有意识到任何这样的工具,因为我从来没有迁移过项目,但这并不意味着没有任何工具可以满足此目的。您可能想看一下确实支持JPA 的Hibernate Tools项目,尽管我不确定它是否允许您从Hibernate XML格式转换为JPA格式。