簡體   English   中英

Hibernate繼承單表

[英]Hibernate inheritance single table

我正在嘗試使用數據庫表“ persons”實現單個表的Hibernate繼承策略。

我有一個家庭,其中有丈夫,妻子,孩子清單和其他囚犯清單。 每個人可能是許多家庭的成員(即丈夫可能是一個家庭的丈夫,而另一個家庭的孩子)。

@Entity
@Table(name = "families")
public class Family extends BaseObject {
    private Parent husband;
    private Parent wife;
    private String surname;

    private List<Child> children = new ArrayList<Child>();
    private List<Other> others = new ArrayList<Other>();

    @ManyToOne(optional = true, cascade = CascadeType.ALL)
    @JoinColumn(name = "husband_id", nullable = true)
    public Parent getHusband() {
        return husband;
    }

    @ManyToOne(optional = true, cascade = CascadeType.ALL)
    @JoinColumn(name = "wife_id", nullable = true)
    public Parent getWife() {
        return wife;
    }

    @LazyCollection(LazyCollectionOption.TRUE)
    @ManyToMany(cascade=CascadeType.ALL)
    @JoinTable(name="persons_families", joinColumns=@JoinColumn(name="family_id"), inverseJoinColumns=@JoinColumn(name="person_id"))
    public List<Other> getOthers() {
        return others;
    }

    @LazyCollection(LazyCollectionOption.TRUE)
    @ManyToMany(cascade=CascadeType.ALL)
    @JoinTable(name="persons_families", joinColumns=@JoinColumn(name="family_id"), inverseJoinColumns=@JoinColumn(name="person_id"))
    public List<Child> getChildren() {
        return children;
    }

人是所有人的共同階級:

@Entity
@Table(name = "persons")
@DiscriminatorColumn(name = "type")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)

public class Person extends BaseObject {
    private List<Family> families;

    @ManyToMany(cascade=CascadeType.ALL)  
    @ManyToMany(cascade=CascadeType.ALL)
@JoinTable(name="persons_families", joinColumns=@JoinColumn(name="person_id"), inverseJoinColumns=@JoinColumn(name="family_id"))
    public List<Family> getFamilies() {
        return families;
    }

子類,其他類和父類是相同的:

@Entity
@Table(name = "persons")
@DiscriminatorValue(value = "children")
public class Child extends Person {}

@Entity
@Table(name = "persons")
@DiscriminatorValue(value = "others")
public class Other extends Person {}

@Entity
@Table(name = "persons")
@DiscriminatorValue(value = "parents")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class Parent extends Person {}

現在,在系統啟動期間,我遇到以下問題:

org.hibernate.MappingException: Repeated column in mapping for entity: org.parafia.model.Other column: type (should be mapped with insert="false" update="false")

我該怎么辦? 我的模型有意義嗎?

最好的祝福

我的模型有意義嗎?

它沒有:如果你的目標是,比如說,愛麗絲是一些家庭的母親,並在其他一些孩子,又該type愛麗絲行的persons呢? 愛麗絲應該是Parent還是Child的實例?

子類必須是分離集。

暫無
暫無

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

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