相关疑难解决方法(0)

从数据库中选择MappedSuperclass(Hibernate)

问题

我有一个@MappedSuperclass名为Data的数据作为我数据库中每个实体的父级.它包含像Id等公共属性.然后我有一个扩展Data的实体,这也是@MappedSuperclass由于它的子类的共同功能.我的数据库中的映射是正确的.

这是我的层次结构的一个例子

@MappedSuperclass
Data  
 |  @MappedSuperclass
 +- Employee  
 |      |  @Entity
 |      +- FullTimeEmployee
 |      |  @Entity
 |      +- PartTimeEmployee
 |  @Entity
 +- Store

并且表格已正确映射:

FullTimeEmployee  
PartTimeEmployee  
Store

无论如何都要查询数据库中所有Employee子类(FullTimeEmployee,PartTimeEmployee)作为Employee的实例而不引用查询中的子类名称?

就像是

List<Employee> allEmployees = getAllEmployees();
Run Code Online (Sandbox Code Playgroud)

我的想法是每当我决定创建另一个Employee子类(即AllDayEmployee)时,我就不必更改查询以包含名称.


因此,正如格雷戈里正确指出的那样,这是不可能的@MappedSuperclass.所以我将其更改为@Entity,因为我想为我使用的每个子类保留一个表InheritanceType.JOINED.

所以现在是上面的层次结构

@MappedSuperclass
Data  
 |  @Entity
 |  @Inheritance(strategy=InheritanceType.JOINED)
 +- Employee  
 |      |  @Entity
 |      +- FullTimeEmployee
 |      |  @Entity
 |      +- PartTimeEmployee
 |  @Entity
 +- Store

表格仍然是:

FullTimeEmployee  
PartTimeEmployee  
Store

现在,为了得到所有员工,我只需致电:

entityManager.createQuery("from Employee").getResultList();
Run Code Online (Sandbox Code Playgroud)

java hibernate

10
推荐指数
1
解决办法
1万
查看次数

Hibernate Mapped Superclass关系和覆盖

我有一个抽象的MappedSuperClass,参与者,它由三种"参与者"扩展.然后每个人都使用自己的'Project',也是一个抽象的MappedSuperClass.但是,我希望基类了解Projects,这样我就可以编写通用代码来与Participants进行交互.如何使用Hibernate注释指定它?以及如何在ExtendedParticipant和ExtendedProject类中覆盖它?

每个Participant类型和每个Project类型都有自己的数据库表,其中包含我无法更改的现有数据和ID(在表中不唯一).

以下代码给出了IDE错误"多对一属性不应该是'Mapped Superclass'".

@MappedSuperclass
public abstract class Participant implements Persistable {

    ...

    @ManyToOne
    @JoinColumn(name = "project_id")
    public Project getProject() {
        return project;
    }

    public void setProject(Project project) {
        this.project = project;
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

并且Project类与同样的问题大致相同:

@MappedSuperclass
public abstract class Project implements Persistable {

    ...

    @OneToMany
    public List<Participant> getParticipants() {
        return participants;
    }

    public void setProject(List<Participant> participants) {
        this.participants = participants;
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

java annotations hibernate

7
推荐指数
1
解决办法
1万
查看次数

标签 统计

hibernate ×2

java ×2

annotations ×1