我有两个类错误和MainError(* - *与MainError的关联是该关联的所有者)
我想将数据保存在我的数据库中,我不能使用Persist Cascade,因为我有许多重复的对象,我想识别重复的对象并将它们与持久的对象关联起来(Error和MainError的名称是唯一的)< / p>
Error error1 = new Error ("ERR1");
Error error2 = new Error ("ERR2");
Error error3 = new Error ("ERR3");
Error error4 = new Error ("ERR4");
Error error5 = new Error ("ERR5");
Error error6 = new Error ("ERR1");
MainError mainError1 = new MainError("MAIN1");
MainError mainError2 = new MainError("MAIN2");
MainError mainError3 = new MainError("MAIN2");
mainError1.addError(error1);
mainError1.addError(error2);
mainError1.addError(error3);
mainError1.addError(error6);
mainError2.addError(error1);
mainError2.addError(error4);
mainError3.addError(error5);
//persisting Error and MainError
例如,如果我已经在我的数据库中保持错误error1 = new Error(&#34; ERR1&#34;)然后我想保持错误error6 = new Error(&#34; ERR1&#34;);我希望我的应用程序能够认识到这已经存在并且关联了#ER; ERR1&#34;到相应的MainError。 我想我需要创建一个方法findByName来知道Error / MainError的名称是否已经存在,如果是,返回此对象,使用它并合并它?
我希望我的问题不会令人困惑 非常感谢你
答案 0 :(得分:1)
正如您在问题中提到的,您可以手动检查数据库中是否存在数据?为此,您还可以将该列设置为uniq约束。
替代解决方案:
在您的情况下,数据库设计应该是这样的:
错误:
id varchar (PK)
mainerror:
id varchar (PK)
error_id varchar (FK)
并且实体类应该是这样的:
<强> Error.java 强>
@Entity
public class Error {
@Id
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 2147483647)
@Column(nullable = false, length = 2147483647)
private String id;
@OneToMany(mappedBy = "errorId", fetch = FetchType.LAZY)
private Collection<MainError> mainErrorCollection;
public Error() {
}
public Error(String id) {
this.id = id;
}
//getter and setter methods
}
<强> MainError.java 强>
@Entity
@Table(name = "main_error")
public class MainError {
@Id
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 2147483647)
@Column(nullable = false, length = 2147483647)
private String id;
@JoinColumn(name = "error_id", referencedColumnName = "id")
@ManyToOne(fetch = FetchType.LAZY)
private Error errorId;
public MainError() {
}
public MainError(String id) {
this.id = id;
}
//getter and setter methods
}
你应该通过为main_error表制作id和error_id的联合PK来防止添加重复记录。