簡體   English   中英

如何在父級中使用復合ID創建雙向一對多關系?

[英]How to create a bidirectional one-to-many relationship with a composite id in the parent?

我如何更新以下類以獲得父母與子女工作之間的一對多關系?

上級:

@Entity
public class Parent {

    @Embeddedid
    private ParentId id;

    @OneToMany
    private List<Child> children;

    public Parent() {
    }

    public Parent(final ParentId id) {
        this.id = id;
    }

    @Override
    public String toString() {
        return "Parent [id=" + this.id + ", children=" + this.children + "]";
    }

    // (Getters and setters)
}

ParentId:

@Embeddable
public class ParentId implements Serializable {

    private Integer key1;

    private Integer key2;

    public ParentId() {
    }

    public ParentId(final Integer key1, final Integer key2) {
        this.key1 = key1;
        this.key2 = key2;
    }

    @Override
    public boolean equals(final Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final ParentId other = (ParentId) obj;
        if (this.key1 != other.key1) {
            return false;
        }
        if (this.key2 != other.key2) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + this.key1;
        result = prime * result + this.key2;
        return result;
    }

    @Override
    public String toString() {
        return "ParentId [key1=" + this.key1 + ", key2=" + this.key2 + "]";
    }

    // (Getters for key1 and key2)
}

兒童:

@Entity
public class Child {

    private Integer id;

    @ManyToOne
    private Parent parent;

    public Child() {
    }

    public Child(final Integer id, final Parent parent) {
        this.id = id;
        this.parent = parent;
    }

    @Override
    public String toString() {
        return "Child [id=" + this.id + ", parent.getId()=" + this.parent.getId() + "]";
    }

    // (Getters and setters)
}

因為我們在當前項目中對此問題進行了一些努力,所以我將發布我們的解決方案作為對此問題的解答。

上級:

@Entity
public class Parent {

    @Embeddedid
    private ParentId id;

    /*******************************************************/
    /*******************************************************/
    /*******************************************************/
    // @formatter:off
    @OneToMany(
        cascade = { CascadeType.MERGE, CascadeType.PERSIST },
        fetch = FetchType.EAGER
    )
    @JoinColumns(
        {
            @JoinColumn(name = "parent_key1"),
            @JoinColumn(name = "parent_key2")
        }
    )
    // @formatter:on
    /*******************************************************/
    /*******************************************************/
    /*******************************************************/
    private List<Child> children;

    public Parent() {
    }

    public Parent(final ParentId id) {
        this.id = id;
    }

    @Override
    public String toString() {
        return "Parent [id=" + this.id + ", children=" + this.children + "]";
    }

    // (Getters and setters)
}

兒童:

@Entity
public class Child {

    private Integer id;

    @ManyToOne
    /*******************************************************************************/
    /*******************************************************************************/
    /*******************************************************************************/
    // @formatter:off
    @JoinColumns(
        {
            @JoinColumn(name = "parent_key1", insertable = false, updatable = false),
            @JoinColumn(name = "parent_key2", insertable = false, updatable = false)
        }
    )
    // @formatter:on
    /*******************************************************************************/
    /*******************************************************************************/
    /*******************************************************************************/
    private Parent parent;

    public Child() {
    }

    public Child(final Integer id, final Parent parent) {
        this.id = id;
        this.parent = parent;
    }

    @Override
    public String toString() {
        return "Child [id=" + this.id + ", parent.getId()=" + this.parent.getId() + "]";
    }

    // (Getters and setters)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM