Java Jpa子类映射
我正在制作一个类似POS的系统。我想知道如何使用JPA映射子类(这是我的DAO)<代码>产品类包含产品详细信息,而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
订单产品
类包含有关产品的信息以及有关订单的详细信息
@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之间存在多对一关系,因此这不是一个合理的问题。