【发布时间】:2022-08-15 19:43:21
【问题描述】:
我有几个有关系的表,如下图所示
我创建了休眠数据模型如下
@Entity
@Table(name = \"SUBJECT\")
public class Subject {
@Column(name = \"NAME\")
private String name;
@Column(name = \"ADDRESS\")
private String address;
@Column(name = \"CLIENT_ID\")
private String clientId;
@OneToMany(mappedBy = \"subject\", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private List<SSI> SSIs;
// getters and setters
...
}
@Entity
@Table(name = \"SUBJECT_IDENTIFIER\")
public class SubjectIdentifier {
@Column(name = \"VALUE\")
private String value;
@Column(name = \"AUTHORITY\")
private String authority;
@Column(name = \"TYPE\")
private String type;
@ManyToOne
@JoinColumns({
@JoinColumn(name = \"SUBJECT_ID\", referencedColumnName = \"ID\", insertable = true,
updatable = true,
@JoinColumn(name = \"CLIENT_ID\", referencedColumnName = \"CLIENT_ID\", insertable =
true, updatable = true)
})
private Subject subject;
// getters and setters
...
}
@Entity
@Table(name = \"SSI\")
public class SSI {
@ManyToOne
@JoinColumns({
@JoinColumn(name = \"SUBJECT_ID\", referencedColumnName = \"ID\", insertable = true,
updatable = true),
@JoinColumn(name = \"CLIENT_ID\", referencedColumnName = \"CLIENT_ID\", insertable =
true, updatable = true)
})
private Subject subject;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumns({
@JoinColumn(name = \"SUBJECT_IDENTIFIER_ID\", referencedColumnName = \"ID\", insertable = true,
updatable = true),
@JoinColumn(name = \"CLIENT_ID\", referencedColumnName = \"CLIENT_ID\", insertable =
true, updatable = true)
})
private SubjectIdentifier subjectIdentifier;
// getters and setters
...
}
我打算按如下方式创建实体
...
Subject s = new Subject();
//.. initialization of s goes here
SubjectIdentifier si = new SubjectIdentifier();
//.. initialization of si goes here
SSI ssi = new SSI();
ssi.setSubject(s);
ssi.setSubjectIdentifier(si);
s.setSSI(ssi);
...
emProvider.get().persist(s);
当我运行它时,我收到以下错误
org.hibernate.MappingException:实体映射中的重复列:*.SSI 列:CLIENT_ID(应使用 insert=\"false\" update=\"false\" 映射)
如果我为 CLIENT_ID 设置了
insert=\"false\" update=\"false\",那么将插入和更新与@Joincolumns 中的其他列混合会再次出错如果我为所有@JoinColumns 设置
insert=\"false\" update=\"false\",那么它将不会保留对象。如何真正处理这种实体创建?
标签: java hibernate joincolumn