gpt4 book ai didi

java - 扩展 hibernate 实体以添加非拥有关系,针对同一个表

转载 作者:搜寻专家 更新时间:2023-11-01 03:42:01 25 4
gpt4 key购买 nike

我在一个大型模块化项目中工作,其中包含许多 maven 模块,依赖管理非常复杂。

在我们的核心模块中,我们有一个具有许多属性的实体 BackOfficeUser。该实体用于大多数应用模块。


但是我的模块 XXX 需要使用一组实体 UserRule 来增强用户。

我想知道的是,是否可以将核心 BackOfficeUser 子类化以在我的应用程序中创建一个 XXXBackOfficeUser,与实体不拥有的新关系,不需要核心数据库表中的新列BackOffice 用户。

我知道我可以创建一个 DAO 并调用 rulesDAO.findByUser(BackOfficeUser user)但我想知道是否可以使用 XXXBackOfficeUser.getRules()

所有这些都没有修改许多其他模块使用的核心 BackOfficeUser 类,它不是 MappedSuperClass 或其他任何东西,而是一个常规的 hibernate 实体。

最佳答案

不修改 BackOfficeUser 类是不可能的,但不修改 BackOfficeUser 持久化的表是可能的。对 BackOffice 类需要的修改是:

@Inheritance(strategy = InheritanceType.JOINED)

对于 Hibernate,这不会导致将额外的 DTYPE 列添加到根表中,因为 Hibernate 支持没有鉴别器列的连接继承。 没有鉴别器的联合继承是不可移植的,因为规范不需要支持它。结果是,为了定义 BackOfficeUser 的实际类型,查询将始终连接到新表。

实现大致如下:

//Existing BackOfficeUser, @Inheritance is added
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class BackOfficeUser {
@Id private Integer id;
}


//New class that extends BackOfficeUser. Will have dedicated
//table for added persistent attributes, shared attributes
//are persisted to existing table "BackOfficeUser"
@Entity
public class XxxBackOfficeUser extends BackOfficeUser {
private String someAttribute

@ManyToMany (mappedBy = "xxxBackOfficeUsers")
private List<Rule> rules;
}

//New entity class which does have relation to XxxBackOfficeUser
@Entity
public class Rule {
@Id private Integer id;

@ManyToMany
private List<XxxBackOfficeUser> xxxBackOfficeUsers;
}

关于java - 扩展 hibernate 实体以添加非拥有关系,针对同一个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12160100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com