我有两个类Error和MainError(*-*与MainError的关联是关联的所有者)

我想将数据持久化在数据库中,我不能使用Persist Cascade,因为我有很多重复的对象,并且我想识别出重复的对象并将它们与持久对象相关联(Error和MainError的名称是唯一的)

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 =新错误(“ ERR1”),然后我要保留错误error6 =新错误(“ ERR1”);我希望我的应用程序认识到它已经存在,并将“ ERR1”关联到相应的MainError。
我想我将需要创建一个方法findByName来了解Error / MainError的名称是否已经保存,如果是,则返回此对象,对其进行处理并合并?

我希望我的问题不会引起混淆
非常感谢你

最佳答案

正如您在问题中提到的那样,您可以手动检查数据库中是否存在数据?为此,您还可以将该列设置为唯一约束。

替代解决方案:

在您的情况下,数据库设计应如下所示:

错误:

id varchar (PK)


mainerror:

id varchar (PK)
error_id varchar (FK)


实体类应该是这样的:

错误.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来防止添加重复记录。

关于java - 在没有Cascade Persist的情况下使用JPA,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31946601/

10-09 13:45