当前位置: 首页 > 知识库问答 >
问题:

JPA继承类型。JOINED如何编写父类的关系实体

江渊
2023-03-14

我有一个母公司类别(工具),有三个子公司(股票、债券、Etf)。父类还与类(InstrumentPrice)有一个OneToMany关系。JPA联接策略用于父实体和子实体之间。当一个子项被持久化(例如Stock)时,工具中的一个条目也会自动持久化,并具有所有公共属性。这很好用。但是,如何为类InstrumentPrice创建条目?我是否必须在保存股票后从DB读取实体工具,并使用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
    ....

类仪器价格

@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个答案

梁鸣
2023-03-14

您必须设置关系的两边。在Instruments类中,创建用于添加InstrentPrice实体的方法。

public void addInstrumentPrice(ip){
   instrumentPriceList.add(ip);
   ip.setInstrument(this);
}
 类似资料:
  • 高尔夫球场示例:我们有类,,和。 这里有很多为人父母的事情。 必须由18条赛道组成,这在高尔夫球场是很正常的 但是我遇到了一个问题。当我尝试调用的构造函数时... ... 我必须同时通过和的实例,但是。。。 ... 这些函数的构造函数要求我传递一个的实例。我陷入了一个递归问题。 我可以通过不再让每个成为这些类的成员来“解决”这一问题,但这让人感觉很不舒服,就像糟糕的做法一样-没有理由不让它们成为f

  • 问题内容: 我想知道如何将某些函数返回的父对象转换为子类。 我不能更改A类。如果可以的话,我可以对A类实现functionIneed,但是由于代码的结构,这是不可能的。 问题答案: Python不支持“广播”。您将需要编写代码,以便它可以适当地进行初始化。

  • 我有一个定义如下的表: 然后我有了这个继承的表: Hibernate在数据库中创建了两个表,但是当我试图在JPA上删除一个继承的对象时,它会返回外键约束违反错误,因为它试图删除第一个类。如何在删除超类时首先删除继承类,以避免键约束违反错误? 谢谢你。

  • 在上一讲代码的基础上,做进一步修改,成为了如下程序,请看官研习这个程序: #!/usr/bin/env python #coding:utf-8 class Person: def __init__(self, name, email): self.name = name self.email = email class Programmer(P

  • 问题内容: 因此,我有两个来自javascript.info的示例: 范例1: 范例2: 从示例2开始:当代码到达时,它在中找不到任何属性,因此它爬升到原型并在那里进行了更改。这就是为什么两只仓鼠都相等的原因,换句话说,它们的肚子也一样。 据此我了解,当编写并添加一个不存在的新属性时,解释器将沿着原型链向上移动,直到找到该属性,然后再进行更改。 但是在示例1中,发生了其他事情: 我们运行,它发生了

  • 本文向大家介绍python中子类继承父类的__init__方法实例,包括了python中子类继承父类的__init__方法实例的使用技巧和注意事项,需要的朋友参考一下 前言 使用Python写过面向对象的代码的同学,可能对 __init__ 方法已经非常熟悉了,__init__方法在类的一个对象被建立时,马上运行。这个方法可以用来对你的对象做一些你希望的 初始化 。 注意:这个名称的开始和结尾都是