Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jpa子类映射_Java_Hibernate_Orm_Jpa - Fatal编程技术网

Java Jpa子类映射

Java Jpa子类映射,java,hibernate,orm,jpa,Java,Hibernate,Orm,Jpa,我正在制作一个类似POS的系统。我想知道如何使用JPA映射子类(这是我的DAO)产品类包含产品详细信息,而订单产品类包含有关产品的信息以及有关订单的详细信息 @Entity @Table(name="products") public class Product implements Serializable{ @Id @Column(name="id") @GeneratedValue(strategy = GenerationType.AUTO public

我正在制作一个类似POS的系统。我想知道如何使用JPA映射子类(这是我的DAO)<代码>产品类包含产品详细信息,而
订单产品
类包含有关
产品的信息以及有关订单的详细信息

@Entity
@Table(name="products")
public class Product implements Serializable{
    @Id
    @Column(name="id")
    @GeneratedValue(strategy = GenerationType.AUTO
    public int getId(){ return id;}

    /**
     Other get/set methods
    */
}

@Entity
@Table(name="order_products")
public class OrderProduct extends Product{
        @Id
        @Column(name="id")
        @GeneratedValue(strategy = GenerationType.AUTO)
        public int getId(){ return id;}

        /**
         Other get/set methods
        */
}
我收到关于重复
@Id
的投诉。但是,
OrderProduct
类确实需要另一个id而不是产品id。我应该如何绘制这张地图

DB是这样的

Table products
id int
name varchar(32)

Table order_product
id int
quantity int
productid int fk referencing product table

@IdClass
@AttributeOverride
会有帮助吗?

我认为您想要实现的目标无论是JPA还是Hibernate都是不可能的。使用联接子类策略时,子类的PK是基类的PK,用于执行表之间的联接。根据JPA规范:

2.1.10.3加入子类策略 在联接子类策略中 类层次结构的根是 由单个表表示每个 子类由一个单独的 包含以下字段的表: 是特定于子类的(不是 继承自其超类),作为 以及表示 它的主键。主键 子类表的列用于 作为的主键的外键 超类表

您可以使用
@PrimaryKeyJoinColumn
更改子类中的列名:

@Entity
@PrimaryKeyJoinColumn(name="PRODUCT_ID", referencedColumnName = "ID")
public class OrderProductTop extends ProductTop {
    ...
}
但是,
PRODUCT\u ID
仍然是PK


老实说,我不明白你的物理模型。对我来说,您当前表示的是一对多关系,这是不正确的(应该是一对一)。

您提供的DB模式表明OrderProduct和Product之间存在多对一关系,因此这不是一个合理的问题。