簡體   English   中英

JPA - 如何從數據庫中的非 PK 列中保存具有值的實體

[英]JPA - How to save entity with value from non PK column in DB

假設我有一個簡單的實體調用 Account 和 User

帳戶

@Id
@Column(name="ACCOUNT_ID")
private Long accountId;

@Column(name="ACCOUNT_NO")
private String accountNo;

用戶

@Id
@Column(name="USER_ID")
private Long userId;

@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="ACCOUNT_NO")
private Account account;

我有一個保存操作

Account acc = accountRepo.findByAccountId(1);
acc.setAccountNo("TestAccNo");

User user = new User();
user.setAccount(acc);

userRepo.save(user);

用戶實體可以成功保存,數據庫結果如下:

User
--------------------------
ID    |    ACCOUNT_NO
--------------------------
1     |       1

我知道映射應該始終使用 PK,它是 User 實體中的 ACCOUNT_ID,但由於某種原因,User 表只有 ACCOUNT_NO,所以我希望 ACCOUNT_NO 存儲“TestAccNo”而不是“1”(Account'S PK)。

我將用戶實體修改為跟隨,它能夠捕獲 ACCOUNT_NO,我保留 @ManyToOne 映射並創建另一個列映射。

@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="ACCOUNT_NO", insertable = false, updatable = false)
private Account account;

@Column(name="ACCOUNT_NO")
private String accountNo;

---------------------------------------

user.setAccountNo(acc.getAccountNo());
userRepo.save(user);

這似乎不是一個正確的方法,有沒有人有更好的解決方案?

謝謝你。

您可以在@JoinColumn使用referencedColumnName來指定要存儲在連接列中的列的值

@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="ACCOUNT_NO", referencedColumnName="ACCOUNT_NO")
private Account account;

暫無
暫無

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

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