簡體   English   中英

我們如何在 JPA/Hibernate 中使用 Integer 或 Long 類型的對象作為外鍵映射?

[英]How do we use Integer or Long type of objects as Foreign key mapping in JPA/Hibernate?

我嘗試了以下似乎不起作用的示例代碼,同時嘗試從表中獲取 object,hibernate 嘗試將用戶 Object 設置在 Long 對象之上,並在嘗試加載具有此 createdBy 字段的父實體時失敗

有幫助嗎?

@JoinColumn(name = "CREATED_BY", referencedColumnName = "USER_ID", updatable = false, nullable = false)
@OneToOne(targetEntity = User.class)
private Long createdBy;

我想使用 Long/Integer 作為字段類型,並希望確保它是具有主鍵 USER_ID 的用戶表的有效外鍵

請注意,我不想使用用戶作為我的 object 的類型,例如,我不想在我的 class 中使用以下聲明

私人用戶創建者;

編輯:這種要求的原因:

嗯,好吧,..我會盡量保持簡短,這基本上是 ORM 的問題之一,例如 Hibernate。我有一個超級 Class AuditLogModel,它由我軟件中的每個實體 class(100 多個實體)擴展,這AuditLogModel class 具有 CreatedBy 和 ModifiedBy 字段,如果我將此字段的類型保留為用戶,那么我軟件中的每個實體都會嘗試在 getResultsList/Merge/refresh 等操作中兩次創建與用戶表的連接。 我們無法控制對實體管理器的 Merge 和 Refresh 調用,它在一個 select 查詢中全部預加載。 由於我的實體有子實體並且它們有更多的子實體等等,這會創建超過 61 個連接,有時會創建 100 多個連接並導致查詢性能問題。 這些 createdBy 和 modified by 列在每次插入/更新時都會更新,但在加載任何實體時不需要任何查詢,因此我想在這里避免不必要的連接。 希望它被理解

啊 OneToOne 映射用於這樣的實體:

@JoinColumn(name = "CREATED_BY", referencedColumnName = "USER_ID", updatable = false, nullable = false)
@OneToOne
private User createdBy;

如果只想使用數據庫值,則必須刪除 OneToOne 映射:

@Column(updatable = false, nullable = false)
private Long createdBy;

暫無
暫無

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

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