[英]How do I save an entity with foreign key without loading the related entity in JPA?
[英]JPA: How do I load an entity with a Foreign Key without loading the related entity
我有兩個實體:
@Entity
public class Account {
@Id
private int id;
// login, name, email, status...
}
@Entity
public class Credential {
@Id
private int id;
@OneToOne
@MapsId
private Account account;
// password, password last set, error count...
}
該設計背后的想法是,業務代碼永遠不應該了解憑據實體,而僅應了解帳戶實體。 此外,我們可能會將憑據存儲在其他位置(數據庫外),因此我不希望Account內有憑據引用。
這種設計的缺點是登錄時首先要檢索和檢查帳戶(未鎖定或禁用)。 只有在那之后,我才檢索憑據。 但是,JPA然后加載第二個Account對象以填充外鍵。
有辦法防止這種情況嗎? 也許是JPA方式給它我已經擁有的帳戶並讓其返回憑據?
我可以用映射到帳戶ID的“ accountId”替換憑據中的外鍵“ account”,但看起來並不理想。
這取決於您的應用程序設計,但是您可以使Credential.account
延遲加載FetchType.LAZY
...
@OneToOne(fetch = FetchType.LAZY)
@MapsId
private Account account;
...或者,您也可以merge()
帳戶對象merge()
到持久會話中,這樣實體管理器就不需要加載關聯了,當然要記住,從那時起它將被管理並且所有更改都將被持久化。 根據您的應用程序,JPA可能會嘗試refresh()
它並仍然執行SELECT,但我不確定。 為此編寫一個集成測試!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.