繁体   English   中英

来自superClass的JPA OneToMany协会

[英]JPA OneToMany Association from superClass

我正在尝试映射超类LendingLine和子类Line和BlockLine的继承。 LendingLine与Lending有一个ManyToOne关联。

当我尝试从数据库中获取LendingLines而没有继承时,它可以正常工作。 该协会也有效。 但是当我添加继承时,Lending中的lendingLines是空的。 我也无法通过继承从DB获取任何LendingLines。

有谁能够帮我?

(抱歉,不好的解释)

提前致谢!

LendingLine:

@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="TYPE")
@DiscriminatorValue(value="Line")
@Table(name = "LendingLine")
public class LendingLine {
...
public LendingLine(){}
@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.EAGER, targetEntity=Lending.class)
@JoinColumn(name = "LendingId")
private Lending lending;
...

贷款:

@Entity
@Table(name = "Lending")
public class Lending {
...
public Lending(){}

    @OneToMany(cascade = CascadeType.ALL,fetch = FetchType.EAGER, mappedBy = "lending")
private List<LendingLine> lendingLines;
...

BlockDate:

@Entity
@DiscriminatorValue(value = "BlockLine")
public class BlockLine extends LendingLine {
public BlockLine(){
}
}

LendingLineRepository:

此类仅从db读取,因为db是由另一个将对象添加到db的应用程序(C#)创建的。

public class LendingLineRepository extends JpaUtil implement LendingLineRepositoryInterface {
@Override
protected Class getEntity() {
    return LendingLine.class;
}

@Override
public Collection<LendingLine> findAll() {
    Query query = getEm().createQuery("SELECT l FROM LendingLine l");
    System.out.println(query.getResultList().size());
    return (Collection<LendingLine>) query.getResultList();
}

表LendingLine:

在此输入图像描述

根据您的需要选择您的超类类型:

混凝土类

public class SomeClass {}

当您想要查询它时以及使用new运算符进一步逻辑时,将您的超类定义为具体类。 你将永远能够直接坚持它。 在鉴别器列中,该实体具有自己的名称。 查询时,它只返回自身的实例而没有子类。

抽象类

public abstract class SomeClass {}

当您想要查询它时,将您的超类定义为抽象类,但实际上并不使用new运算符,因为所有处理的逻辑都是由它的子类完成的。 这些类通常由其子类保留,但仍可以直接保留。 U可以预定义任何子类必须实现的抽象方法(几乎像一个接口)。 在鉴别器列中,该实体将没有名称。 查询时,它会返回所有子类,但没有其他已定义的信息。

MappedSuperclass

@MappedSuperclass public abstract class SomeClass {}

无法查询具有@MappedSuperclass接口的超类。 它为其所有子类提供预定义逻辑。 这就像一个界面。 您将无法持久保存映射的超类。

有关详细信息,请参阅: JavaEE 7 - 实体继承教程


原始信息

你的SuperClass LendingLine需要定义一个@DiscriminatorValue ,因为它可以被实例化并使用现有的db-sheme,这应该被定义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM