使用超类成员的多对多关系"mappedBy"



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

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

@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列表——我还想捕获双向关系,所以我使用mapappedby配置对其建模,但在这两种情况下都使用超类"Activity"中存在的"raisedBy"字段:

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

当我使用mapappedby与成员变量"raisedBy"从超类,我还指定了targetEntity(否则它是无法找到ToDo对象中的字段)。

问题是,当我尝试调用getTodoItems() -它实际上只是返回所有的"活动"对象由"raisedBy"链接到当前的人。例如,它抛出了一个强制转换异常,因为它期望得到ToDos列表,但Hibernate也返回列表中的Status对象。

我希望mappedBy配置以及DiscriminatorValue足以使这项工作-有人遇到这个或解决它吗?

感谢

编辑

我刚刚发现了这篇文章:

有人能指出我在一个好的方向@哪里概述和例子?我可以更新我的人如下使用@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

最新更新