0
我有一個JPA實體,可以是子類,定義如下獲取子類:從EntityManager.find()
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "IDTYPE",
discriminatorType = DiscriminatorType.STRING,
length = 12)
public class BaseObject implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
//etc
這樣做的好處是,BaseObject及其所有子類份額相同的ID字段 - 每個值都是唯一的。我的問題是,當我做一個EntityManager.find()基類是這樣的:
@PersistenceContext protected EntityManager em;
// find a record.
BaseObject obj = em.find(BaseObject.class, longIDValue);
請問發現如果使用該特定ID方法返回的子類中的一個?或者它會始終只返回一個BaseClass對象?
後續問題:這種行爲在不同的JPA實現中是否一致? (例如,Hibernate與EclipseLink)
當你這樣做會發生什麼?當我用DataNucleus JPA做到這一點時,我得到了正確的類型......即可以是子類。就像JPA規範 –
@NeilStockton我在使用我的應用程序時遇到問題,所以我還沒有得到測試。但即使它工作,我想確保我沒有做一些依賴於實現的東西。我錯過了規範中的內容 - 如果您可以發佈鏈接,我會將其標記爲答案。 – AlanObject
你確定你想/需要一個具有連接繼承的超級實體嗎?這會導致關鍵減速,特別是在* @ OneToMany/@ ManyToMany *關係中。 –