java - 在 Hibernate 中映射具有多个 ID 的扩展实体

标签 java hibernate mapping nhibernate-mapping jta

我已经实现了一个由 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);

并具有以下类实体: 文章.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

水果.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。任何帮助表示赞赏。提前致谢。

最佳答案

顾名思义,一个实体不能有两个 ID。

考虑操作

entityManager.find(Article.class, 1l);

如果有两篇文章(一篇文章和一个水果)的 id 都为 1,它如何知道返回哪一篇?

如果您的表需要每个表都有 ID,则实体继承不是合适的解决方案。考虑将公共(public)元素放在 @MappedSuperclass 中。

关于java - 在 Hibernate 中映射具有多个 ID 的扩展实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10455229/

相关文章:

java - Mybatis 期望 selectOne() 返回一个结果(或 null),但发现 : 190

使用 lambda 表达式返回结果的 Java 方法引用

hibernate : CascadeType. PERSIST不起作用,但是用CascadeType.ALL保存对象

java - Session.get() 的调用在多次调用后挂起

python - 将 .txt 数据加载到 10x256 3d numpy 数组中

java - 无法运行构建 Ant 项目的脚本

java - 如何在java代码中达到所需的点?

java - Spring数据-@Modifying(clearAutomatically = true,flushAutomatically = true)导致另一个实体无法更新

java - 限制 Jersey 中的路径媒体类型映射

hibernate - JPA/Hibernate在加入时选择列子集