簡體   English   中英

使用繼承映射的一對多JPA映射

[英]JPA mapping for one to many with inheritance mapping

我有一個場景。

@Entity
@Table(name = "someTable")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@Access(AccessType.FIELD)
@DiscriminatorColumn(name = "someDisc")
public abstract class AbstractClass{}

@Entity
@Access(AccessType.FIELD)
@DiscriminatorValue("1")
public class Child1 extends AbstractClass{
}

@Entity
@Access(AccessType.FIELD)
@DiscriminatorValue("2")
public class Child2 extends AbstractClass{
}

現在在第3個表中我想要這樣的東西

@Entity
@Table
public class ThridTable{

    @OneToMany(cascade = CascadeType.ALL, fetch = EAGER, orphanRemoval = true)
    @JoinColumn(name = "foreinKeyCol", nullable = false)
    @OrderColumn(name = "orderCol")
    private List<Child2> child2 = new ArrayList<>();


    @OneToMany(cascade = CascadeType.ALL, fetch = EAGER, orphanRemoval = true)
    @JoinColumn(name = "foreinKeyCol", nullable = false)
    @OrderColumn(name = "orderCol")
    private List<Child1> child1 = new ArrayList<>();

//more setters/getters
}

現在雖然它持續存在並且值正在表中正確保存。 使用ThridTable對象獲取對象時遇到的問題。 生成的查詢不會在同一個表中的兩個實例(即child1和child2)之間進行調整,並嘗試更新子項1中的child2的對象。

如果您正在使用休眠,則可以在@OneToMany映射中添加@Where條件。

例如:

@OneToMany(cascade = CascadeType.ALL, fetch = EAGER, orphanRemoval = true)
@JoinColumn(name = "foreinKeyCol", nullable = false)
@OrderColumn(name = "orderCol")
@Where(clause="someDisc=1")
private List<Child1> child1 = new ArrayList<>();

看看api: http//docs.jboss.org/hibernate/core/4.1/javadocs/org/hibernate/annotations/Where.html

和: http//docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/#entity-hibspec-collection

暫無
暫無

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

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