我正在使用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。
现在我有两个扩展活动的对象: 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对象,并且person可以有一个状态列表和一个ToDo列表--我还想捕获双向关系,所以我使用mappedBy配置来建模它,但是在这两种情况下都使用超类“活动”中存在的"raisedBy“字段:
public abstract class Person {
@ManyToMany(mappedBy="raisedBy", targetEntity=Activity.class)
private List<ToDo> todoItems = new ArrayList<ToDo>();由于我使用的是来自超类的mappedBy成员变量"raisedBy“,所以我也指定了targetEntity (否则它无法在ToDo对象中找到字段)。
问题在于,当我试图调用getTodoItems()时,它实际上只是将由"raisedBy“链接的所有”活动“对象返回给当前的人。例如,它抛出一个强制转换异常,因为它期待ToDos的列表,但是Hibernate也返回列表中的状态对象。
我希望mappedBy配置和DiscriminatorValue一起足够让这个工作--有没有人遇到这个问题或者解决了它?
谢谢
编辑
我刚找到这篇文章:
有人能为我指出一个好的方向吗?我是否可以按下面的方式更新我的个人,以便在鉴别器列中使用@Where?
public abstract class Person {
@ManyToMany(mappedBy="raisedBy", targetEntity=Activity.class)
@Where(clause="activityType=Todo")
private List<ToDo> todoItems = new ArrayList<ToDo>();发布于 2011-07-20 16:36:07
添加注释:@Where(子句= "activityType= 'Todo'")
但是它是hibernate注释,而不是JPA
https://stackoverflow.com/questions/6765076
复制相似问题