JPA InheritanceType.JOINED как написать сущности отношений родительского класса - PullRequest
0 голосов
/ 03 февраля 2019

У меня есть родительский класс сущности ( Инструмент ) с тремя детьми ( Stock, Bond, Etf ).Родительский класс также имеет отношение OneToMany с классом ( InstrumentPrice ).Стратегия соединения JPA используется между родительским и дочерним объектами.Если дочерний элемент сохраняется (например, Stock), то запись в Instrument автоматически сохраняется также со всеми общими свойствами.Это отлично работает.Но как создать запись для класса InstrumentPrice ?Нужно ли мне читать Инструмент сущности из БД после сохранения Акций и обновлять Инструмент с помощью InstrumentPrice?

@MappedSuperclass
public abstract class BaseEntity implements Serializable {

    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    protected int id;

}

Родительский класс Инструмент

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "instr_type", discriminatorType = DiscriminatorType.STRING, length = 1)
@Table(name = "instrument")

public class Instrument extends BaseEntity {

    @Column
    private String symbol;

    @Column
    private String isin;

    @Column
    private String name;

    @Column
    private boolean active;

    @OneToMany(mappedBy = "instrument", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    private List<InstrumentPrice> instrumentPriceList;

    // public getters & setters
    ....

класс InstrumentPrice

@Entity
@Table(name = "instrumentprice")
public class InstrumentPrice extends BaseEntity {

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "instrument_id", nullable = false)
    private Instrument instrument;

    @Column
    private LocalDate date;
    @Column
    private double open;
    @Column
    private double high;
    @Column
    private double low;
    @Column
    private double close;
    @Column
    private long volume;

    // public getters & setters
    ....

дочерний класс акции

@Entity
@DiscriminatorValue("S")
@PrimaryKeyJoinColumn(name = "id")
@Table(name = "stock")
public class Stock extends Instrument { 

...  fields specific to Stock ...

}

1 Ответ

0 голосов
/ 03 февраля 2019

Вы должны установить обе стороны отношения.В классе Instrument создайте метод для добавления сущности instrumentPrice.

public void addInstrumentPrice(ip){
   instrumentPriceList.add(ip);
   ip.setInstrument(this);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...