可能是一个常见问题,但无论如何:
假设我有一个简单的实体任务,其中包含 Activity 实体列表:
@Entity
@Table(name = "task")
public class Task {
@Id
@Column(name = "id")
private Integer id;
@OneToMany
@JoinColumn(name = "task_id")
private List<Activity> activities;
}
Activity 实体非常简单:
@Entity
@Table(name = "activity")
public class Activity {
@Id
@Column(name = "id")
private Integer id;
@Column(name = "activity_type")
private int type;
}
在这里我想做一些魔术——基于 Activity 类型,我希望 hibernate 用不同的 Activity 实现来填充 Task.activities,例如,如果 Activity.type == 1,我想在那里有 ActivityAImpl,如果 Activity.type == 1,我想在那里有 ActivityAImpl。 type == 2 - 它应该是 ActivityBImpl 等等。基本上我所有的 Activity 都会使用某种方法“execute()”实现一个接口(interface)。
希望有一个简单的解决方案。
感谢您的帮助!
最佳答案
没有对此进行测试,但我认为这应该可行......
@Entity
@Table(name = "activity")
@Inheritance
@DiscriminatorColumn(name = "activity_type", discriminatorType = DiscriminatorType.INTEGER)
public abstract class Activity {
@Id
@Column(name = "id")
private Integer id;
}
@Entity
@DiscriminatorValue("1")
public class ActivityImpl1 extends Activity {
}
@Entity
@DiscriminatorValue("2")
public class ActivityImpl2 extends Activity {
}
关于java - 实体的 Hibernate 和动态包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5592888/