簡體   English   中英

如何在沒有類的情況下使用Hibernate composite-id?

[英]How to use Hibernate composite-id without class?

我試圖在xml中映射一個鍵,如下所示:

    <composite-id>
        <key-property name="userId" column="USER_ID" />
        <key-property name="passwordsBack" column="PASSWORDS_BACK" />
    </composite-id>

我在文檔中的“Hibernate in Action”和其他地方看到過這種構造,沒有class =“BlahPK”。 但是,當我嘗試獲取時,我得到:

Initial SessionFactory creation failed.org.hibernate.MappingException: composite-id class must implement Serializable: MyClass

這是一個非常簡單的數據類,它不是可變的,我不需要一個鍵,當然也不想重新構建我的對象並定義一個單獨的公共類只是為了用Hibernate讀取它。 目前,我已經知道使用rowid作為id,但我寧願讓映射干凈地反映表和對象的使用方式。

免責聲明:我搜索了StackOverflow,我發現的是如何處理復合鍵休眠 ,它只是說“不要這樣做,但你可以”。

您可以在實體類中定義多個@Id屬性。 喜歡

@Entity 
class User implements Serializable {
  @Id
  private String userId;

  @Id
  private String passwordsBack;
..
}

這只能由Hibernate支持,而不是JPA。 當您嘗試將其加載到會話中時,您需要創建User的實例並設置id屬性並調用session.load(User.class, userinstance)

我發現這個hibernate文檔有助於理解這一點。 http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/#entity-mapping-identifier您需要查找的部分是2.2.3.2.2。 多個@Id屬性。

編輯:剛剛意識到您需要xml描述而不是基於注釋的解決方案。 可能有類似於這種方法的東西。 讓我看看能否為您提供參考。

更新:如果您可以更改您的類MyClass以實現Serializable ,那將解決問題,而無需另外的公共PK類。 你需要有equalshashCode方法,它們將使用你的id字段。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM