数据库
*user_account*
id (PK)
email
password
*user_detail*
id(PK)(FK)
name
city
实体
@Table(名称= “user_detail”) public class UserDetail implementsSerializable {
@Id private Integer id; ... @OneToOne @JoinColumn(name="id") private UserAccount userAccount;
}
@Table(name="user_account")
public class UserAccount implementsSerializable{
@Id private Integer id;
@OneToOne(mappedBy="userAccount")
private UserDetail userDetails;
}
错误 异常描述:字段[user_detail.ID]存在多个可写映射。只有一个可以被定义为可写,所有其他的必须被指定为只读。
答案 0 :(得分:1)
您不能同时拥有@Id private Integer id;
和@JoinColumn(name="id")
,您必须删除其中之一:我怀疑您确实需要详细信息中的主键,因此只需删除@Id
行即可那里。
答案 1 :(得分:1)
如果UserAccount
中的ID既是主键又是外键,则应将其声明为单个字段并进行相应映射。像这样:
@Entity
public class UserAccount implements Serializable {
@Id
@OneToOne(mappedBy="userAccount")
private UserDetail userDetails;
}
或者使用@MapsId
。
但是,我怀疑你真正想要的是一个分为两个表的单一类:
@Entity
@Table(name = "user_account")
@SecondaryTable(name = "user_detail")
public class User implements Serializable {
@Id
private int id;
private String email;
private String password;
@Column(table = "user_detail")
private String name;
@Column(table = "user_detail")
private String city;
}