Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA-如何在DB中使用非PK列中的值保存实体_Java_Jpa - Fatal编程技术网

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,这就是我想要的,为什么我从来没有在脑海中想到参考专栏。