2009-06-05 104 views
33

當我使用@Entity註釋一個類並嘗試解析依賴關係時,我可以選擇兩個不同的包之間的包,javax.persistence.Entity和org.hibernate.annotations.EntityJPA實體和Hibernate實體之間的區別

javax包是JPA的實體註釋,但爲什麼有一個hibernate實體註釋,它與JPA的註解有什麼不同呢?它只是一個允許定義更多屬性的擴展嗎?

回答

34

org.hibernate.annotations.Entity有一些額外的屬性,javax.persistence.Entity尚未標準化。額外的功能只有在直接使用hibernate的AnnotationConfiguration或hibernate是JPA提供程序時纔有效。

the FAQ編輯:新的鏈接 the specific question 編輯:新的鏈接the answer

我使用@ org.hibernate.annotations.Entity,並得到一個未知實體例外

總是導入@ javax.persistence.Entity

@ org.hibernate.annotations.Entity完成@ javax.persistence.Entity但不補發

例如,有一個名爲optimisticLock的屬性,它告訴Hibernate是否使用標準版本列或在更新時比較所有列。此行爲不在JPA規範中,因此爲了配置它,您必須使用在其自己的註釋中找到的特定於hibernate的擴展。

像這樣:

@Entity 
@org.hibernate.annotations.Entity(optimisticLock=OptimisticLockType.ALL) 
public class MyEntity implements Serializable { 
... 
} 
-1

我不確定差異,但我確定如果您的類路徑中有Hibernate jar,那麼您使用的是Hibernate JPA。 Hibernate提供了JPA的實現。即使您使用的是使用Hibernate JPA的javax.persistence包。

區別只在於命名。他們可能會在Hibernate包空間和javax包空間中提供相同的類。

1

@在你的項目中使用,如果假設你想使用我們需要改變的代碼JDBC模板或ibatis的org.hibernate.annotations。如果我們使用javax.persistence,則不需要更改代碼。這是org.hibernate.annotations和javax persistence之間的主要區別