编程语言
首页 > 编程语言> > java-superClass的JPA OneToMany协会

java-superClass的JPA OneToMany协会

作者:互联网

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

当我尝试从数据库获取LendingLines而没有继承时,它工作正常.该协会也起作用.但是当我添加继承时,Lending中的lendingLines为空.我也无法通过继承从数据库获得任何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:

enter image description here

解决方法:

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

具体课程

公共类SomeClass {}

当您要查询超类并且使用新的运算符获取进一步的逻辑时,请将您的超类定义为具体的类.您将始终能够直接将其持久化.在鉴别符列中,该实体拥有自己的名称.查询时,它仅返回自身的实例,而不返回子类.

抽象类

公共抽象类SomeClass {}

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

映射超类

@MappedSuperclass
 公共抽象类SomeClass {}

不能查询具有@MappedSuperclass接口的超类.它为所有子类提供了预定义的逻辑.这就像一个界面.您将无法保留映射的超类.

有关更多信息:JavaEE 7 – Entity Inheritance Tutorial

原始信息

您的SuperClass LendingLine还需要定义一个@DiscriminatorValue,因为可以实例化它,并且您使用现有的db-sheme(应在其中定义).

标签:many-to-one,inheritance,jpa,java
来源: https://codeday.me/bug/20191027/1941772.html