java - 具有继承映射的一对多 JPA 映射

标签 java hibernate jakarta-ee jpa annotations

我有一个场景。

@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 的对象。

最佳答案

如果您使用的是 hibernate ,则可以将 @Where 条件添加到 @OneToMany 映射。

例如:

@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

关于java - 具有继承映射的一对多 JPA 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13972633/

相关文章:

java - 通过socket连接tomcat

java - 如何在 JButton 中正确对齐多行文本?

java - Hibernate SQLQuery 列表方法返回对象而不是对象数组

java - 汉诺塔 Java 递归

java - 使用列表作为列会导致性能不佳 - JPA

oracle - 如何在 Hibernate Spring 中访问特定模式?

java - Glassfish 超时

java - 使用 wsimport 生成 Web 服务客户端类

Java/Android 使用一个 obj 指针来引用 2 个类

java - 不幸的是应用程序在调试时停止了