gpt4 book ai didi

java - 使用 "mappedBy"与 super 类成员的多个 ManyToMany 关系

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

我正在使用 Hibernate 开发一个应用程序,并尝试对以下场景进行建模:

我有一个 Activity 抽象类,定义如下:

@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="activityType")
@Table(name = "BF_ACTIVITY")
public abstract class Activity extends PersistableObject {

@ManyToOne
@JoinColumn(name = "ASSIGNED_TO")
protected Contactable assignedTo;

@ManyToOne
@JoinColumn(name = "RAISED_BY")
protected Contactable raisedBy;

请注意,我正在使用单表继承(因此所有实现对象都将使用同一个表)并设置了 DiscriminatorColumn。

现在我有两个扩展 Activity 的对象:ToDo 和 Status:

@Entity
@Table(name = "BF_TODO")
@DiscriminatorValue("Todo")
public class ToDo extends Activity {
...


@Entity
@Table(name = "BF_STATUS")
@DiscriminatorValue("Status")
public class Status extends Activity {
...

再次注意,对于这两种实现,我都设置了一个 DiscriminatorValue。

最后,我想要一个 Person 对象,这个人可以有一个 Status 列表和一个 ToDo 列表 - 我还想捕获双向关系,所以我使用 mappedBy 配置对其进行建模,但是在两种情况都使用父类(super class)“Activity”中存在的“raisedBy”字段:

public abstract class Person {

@ManyToMany(mappedBy="raisedBy", targetEntity=Activity.class)
private List<ToDo> todoItems = new ArrayList<ToDo>();

因为我将 mappedBy 与来自父类(super class)的成员变量“raisedBy”一起使用,所以我还指定了 targetEntity(否则它无法在 ToDo 对象中找到该字段)。

问题是当我尝试调用 getTodoItems() 时 - 它实际上只是将“raisedBy”链接的所有“Activity”对象返回给当前人。例如它抛出一个转换异常,因为它需要 ToDos 列表,但 Hibernate 也在列表中返回 Status 对象。

我希望 mappedBy 配置和 DiscriminatorValue 足以完成这项工作 - 有没有人遇到过这个问题或解决了这个问题?

谢谢


编辑

我刚找到这篇文章:

有人能给我指出一个好的@Where 概述和示例的方向吗?我可以按如下方式更新我的人员以将 @Where 与鉴别器列一起使用吗?

public abstract class Person {

@ManyToMany(mappedBy="raisedBy", targetEntity=Activity.class)
@Where(clause="activityType=Todo")
private List<ToDo> todoItems = new ArrayList<ToDo>();

最佳答案

添加注解:@Where(clause = "activityType= 'Todo'")

但是是hibernate注解,不是JPA

关于java - 使用 "mappedBy"与 super 类成员的多个 ManyToMany 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6765076/

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