我已经实现了一个db,它由Article和Fruit表组成,具有以下规范:
create table Fruit
(
ART_ID bigint,
FRU_ID bigint not null auto_increment,
FRU_FROZEN varchar(15),
primary key(FRU_ID)
);
# Implemented
create table Article
(
ART_ID bigint,
ART_NAME varchar(10) not null,
ART_COST varchar(10) not null,
primary key(ART_ID)
);
alter table Fruits添加约束FK_FRUIT_ARTICLE外键(ART_ID) 引用文章(ART_ID)关于删除限制更新限制;
以及以下类实体: Article.java
@Entity
@Table(name = "Article")
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Article implements Serializable
{
@Id @GeneratedValue(strategy=GenerationType.AUTO)
@Basic(optional = false)
@Column(name = "ART_ID")
private Long id;
@Basic(optional = false)
@Column(name = "ART_NAME")
private String name;
@Basic(optional = true)
@Column(name = "ART_COST")
private String cost;
//构造函数,getter和setter
Fruit.java
@Entity
@Table(name="Fruit")
public class Fruit extends Article{
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "FRU_ID")
private long fruitID;
@Basic(optional = false)
@Column(name = "FRU_FROZEN")
private String fruitFrozen;
//构造函数,getter和setter
现在,我的问题是如何在Article和Fruit中使用ID,如果我这样保留它,它会抛出异常,即子类不能包含IDClass,因为它会产生多个ID。任何帮助表示赞赏。提前谢谢。
答案 0 :(得分:2)
这意味着它所说的,实体不能有两个ID。
考虑操作
entityManager.find(Article.class, 1l);
如果有两篇文章(一篇文章和一篇水果)都有id 1,那该怎么知道要返回哪一篇?
如果您的表需要每个都有ID,则实体继承不是合适的解决方案。考虑将公共元素放在@MappedSuperclass
中。