Java 使用Hibernate EntityManager(与Hibernate Core相比)有什么缺点吗?
Hibernate EntityManager文档: 您可以同时使用这三种注释,而不使用JPA 编程接口和生命周期,甚至是纯本机Hibernate内核, 取决于项目的业务和技术需求。你可以在 任何时候都可以使用Hibernate本机API,如果需要,甚至可以使用Hibernate本机API 本机JDBC和SQL 使用JPA API(EntityManager)的代码显然更具可移植性(即使偶尔会回退到Hibernate Core) 但是,当使用纯Hibernate内核时,我会有任何优势吗?我想知道,JPA2模型是否真的适合Hibernate内核之上而没有任何矛盾?看,退回到核心是否总是容易且没有问题 我主要关心的是:Java 使用Hibernate EntityManager(与Hibernate Core相比)有什么缺点吗?,java,hibernate,orm,jpa,jpa-2.0,Java,Hibernate,Orm,Jpa,Jpa 2.0,Hibernate EntityManager文档: 您可以同时使用这三种注释,而不使用JPA 编程接口和生命周期,甚至是纯本机Hibernate内核, 取决于项目的业务和技术需求。你可以在 任何时候都可以使用Hibernate本机API,如果需要,甚至可以使用Hibernate本机API 本机JDBC和SQL 使用JPA API(EntityManager)的代码显然更具可移植性(即使偶尔会回退到Hibernate Core) 但是,当使用纯Hibernate内核时,我会有任何优势吗?我想知道
可能差异不仅在于API,还在于底层的语义?!(例如,不同的事务/版本控制/锁定语义可能会发生冲突:悲观锁定在核心文档中提到,但在EntityManager文档中没有提到——因此,我是否仍然可以通过返回到核心而使用悲观锁定而不引起问题?诸如此类的事情……)使用JPAAPI的好处远远大于使用纯hibernate的任何缺点。我不是一个专家,但我不知道在什么情况下,让自己进入冬眠状态是有益的。(放弃纯JDBC是另一回事。) 如果有人有任何例子可以分享,我很乐意看到。很明显:取决于您项目的业务和技术需求 但是,当使用纯Hibernate内核时,我会有任何优势吗 不要忘记Hibernate注释和Hibernate EntityManager都构建在Hibernate核心之上所以再增加一层。除此之外,它还依赖于存储在XML文件中的映射元数据。一些用户更喜欢使用XML文件而不是注释,因为它使域对象完全独立于您选择的DAO实现。但是当使用注释时,Hibernate和JPA书是很清楚的 与本机XML文件相比,减少映射元数据的代码行,您可能会喜欢注释更好的重构功能 JPA 2更适合JPA 1未提供的内容。现在有很多新功能可用,例如
- 面向对象查询API
- 包装器的@embeddeble
- @Embeddedables@ElementCollection的集合
- Hibernate3的新特性
- Hibernate3与JBoss中EJB3容器的关系
- Hibernate3与EJB3规范的区别是什么
- 可在EJB外部使用Hibernate的自定义注释
- 冬眠的未来
会话的包装器)。所以,是的,如果你真的需要,回到核心是很容易的(例如,对于规范中还没有的东西,比如QueryByExample)。而且,不,这不会引起任何问题(因为您在JPA中实际上正在使用它或它的子集)
相关问题
我喜欢直接使用Hibernate内核。我也更喜欢XML映射文件。
我对使用第二层访问Hibernate核心功能并不感兴趣。就我而言,持久层的可移植性是一个完全没有问题的问题
与Hibernate API相比,JPA API几乎没有什么真正的优势——我看到有人使用JPA命名查询(标准可能会更清晰更好),而JPA注释设计得更好一些
除此之外,JPA只是增加复杂性和潜在开销的一层——没有任何好处。在这种情况下,正确的决策是反对使用它。
数据库的可移植性非常真实。我有我使用的自定义分配器(生成器),它们是完全可移植的,并且比设计错误的Hibernate分配器性能更高、更简单
这种方法在多个主要的商业、政府和遗留数据库重建项目中非常成功。简言之——关注重要的东西——以及API之上的API,不是吗。我完全同意,JPA的优势可能更大。但我真的很想知道,在没有EntityManager的情况下使用Hibernate Core是否还有任何(显著的)优势……事实上,JPA2.0中有悲观锁定,所以这是一个很糟糕的例子,但我明白你的意思。@Pascal:所以Hibernate文档中没有它(它在,但我没有)
JDBC >> Hibernate core >> Hibernate Annotations
JDBC >> Hibernate core >> Hibernate EntityManager