MappedSuperclass和Embeddable有什么区别?如何使用它们?

8

一个MappedSuperclass使用继承来重用字段和代码。

此外,我们利用Hibernate提供的可嵌入特性进行一些组合。

@Embeddable
public class Department {

private long deptId;
private String name;
private String description;
}

@Entity
@Table(name="CSE_DEPT", schema="test")
public class CSEDepartment{

@Embedded
private Department dept;
}

@MappedSuperclass和@Embeddable之间的区别是什么,以及它们适用的合适情况是什么?
@MappedSuperclass是一个类注释,可以使实体继承该类来共享字段和方法。另一方面,@Embeddable是一个类注释,用于标识可嵌入到其他实体中的类。
适当使用@MappedSuperclass的情况包括:多个实体具有相同的字段和方法,并且您希望避免在每个实体中重复这些内容。适当使用@Embeddable的情况包括:您想要将一个类嵌入到另一个实体中,以便在数据库中存储在同一张表中。
1个回答

5

@MappedSuperClass用于在不同的实体之间共享状态,使它们具有相同的字段,可以在不同的实体中重复使用这些字段。通常作为抽象类创建,不能创建其自身的实例。当您想要模拟“是一个”关系时使用它。它不能用作关联的目标。

@Embeddable用于映射复合值类型。@Embeddable类作为我们实体中的一种字段类型使用。当您想要模拟“有一个”关系时,可以使用它。

在您提出的问题中,可能都不适用。因为MappedSuperClass和Embeddable都不能成为实体。(我假设部门类中的departmentid应该是主键)对于您的情况,最好使用@OneToOne实体关联,因为cse department将具有唯一的id名称和描述。您不希望在一个学院中有两个cse部门。


你在说哪个状态? - gstackoverflow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接