Java JPA-如何在DB中使用非PK列中的值保存实体
假设我有一个简单的实体调用帐户和用户 账户Java JPA-如何在DB中使用非PK列中的值保存实体,java,jpa,Java,Jpa,假设我有一个简单的实体调用帐户和用户 账户 @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) @J
@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);
用户实体可以通过以下db结果成功保存:
User
--------------------------
ID | ACCOUNT_NO
--------------------------
1 | 1
我理解映射应该始终使用PK,即用户实体中的ACCOUNT_ID,但由于某些原因,用户表只有ACCOUNT_NO,因此我希望ACCOUNT_NO存储“TestAccNo”,而不是“1”(ACCOUNT的PK)
我将用户实体修改为following,它能够捕获帐户。不,我保留@manytone映射并创建另一个列映射
@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;
谢谢你@Rono,这就是我想要的,为什么我从来没有在脑海中想到参考专栏。