org.hibernate.annotations与javax.persistence

52 java hibernate jpa

使用来自的注释是不是一个坏主意

javax.persistence包

而不是使用

org.hibernate.annotations注释

我知道使用javax.peristence确实引入了另一种依赖.但如果我忽视这一点,那么利弊是什么?

Thi*_*ilo 73

相当于对手.

Hibernate是Java Persistence API的一个实现,在可能的情况下,您应该使用标准注释(在javax.persistence中).这样,理论上您可以在其他JPA实现上运行代码.

只有当您需要特定于Hibernate的功能时,才应使用Hibernate注释.

额外的依赖关系只在JPA接口/注释jar文件上,非常轻.

  • 因此可以将来自这些包(javax.persistence 和 org.hibernate.annotations)的注释与 @Entity 混合使用 (2认同)

gav*_*koa 6

另一个缺点:

http://www.mkyong.com/hibernate/cascade-jpa-hibernate-annotation-common-mistake/

在这里:

@OneToMany(fetch = FetchType.LAZY, 
  cascade = {CascadeType.PERSIST,CascadeType.MERGE }, 
  mappedBy = "stock")
public Set<StockDailyRecord> getStockDailyRecords() {
    return this.stockDailyRecords;
}
Run Code Online (Sandbox Code Playgroud)

有了这个:

stockDailyRecords.setStock(stock);        
stock.getStockDailyRecords().add(stockDailyRecords);

session.save(stock);
session.getTransaction().commit();
Run Code Online (Sandbox Code Playgroud)

不能像@OneToManyJPA 那样工作,它期望JPA级联– javax.persistence.CascadeType。但是,当使用Hibernate会话保存它时,org.hibernate.engine.Cascade将进行以下检查:

if ( style.doCascade( action ) ) {
Run Code Online (Sandbox Code Playgroud)

和Hibernate保存过程将导致ACTION_SAVE_UPDATE操作,但是JPA将传递ACTION_PERSISTACTION_MERGE,它将不匹配并导致级联无法执行。