簡體   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