Java-JPA-级联关系保持一对一关系
作者:互联网
我有一个双向的一对一关系,我也希望其中一个实体的ID也是另一个实体的ID.
我的代码是这样的:
@Entity
public class UserProfile extends AbstractEntity{
@OneToOne(mappedBy="user",cascade = CascadeType.ALL)
private UserPreferences preferences;
//...
}
另一个实体:
@Entity
public class UserPreferences implements Serializable{
@Id
@Column(name="USER_ID")
private String userId; // I want USER_ID act as both primary key and foreign key
@OneToOne
@PrimaryKeyJoinColumn(name="USER_ID")
UserProfile user;
// ...
}
但是当我坚持这样的UserProfile时:
UserPreferences pref = new UserPereferences();
pref.setUser(user);
user.setPreferences(pref);
em.persist(user);
它给我一个错误,该错误表明UserPreferences的ID不能为null
似乎jpa无法理解它应该使用UserProfile ID作为UserPreferences ID.
错误:
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'USER_ID' cannot be null
Error Code: 1048
Call: INSERT INTO USERPREFERENCES (USER_ID) VALUES (?)
我的代码有什么问题吗? jpa可以解决这个问题吗?还是我应该分开坚持?
提前致谢
解决方法:
你不这样做
@Id
@Column(name="USER_ID")
private String userId; // I want USER_ID act as both primary key and foreign key
@OneToOne
@PrimaryKeyJoinColumn(name="USER_ID")
UserProfile user;
因为您使用了两次参考,所以只需使用一次
@OneToOne
@Id
@Column(name="USER_ID")
UserProfile user;
像这样
标签:one-to-one,jpa,primary-key,cascade,java 来源: https://codeday.me/bug/20191119/2038019.html