java - 实体的 Hibernate 和动态包装器

标签 java hibernate

可能是一个常见问题,但无论如何:

假设我有一个简单的实体任务,其中包含 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/

相关文章:

java - 在 JBehave 中使用多个元过滤器进行过滤

javascript - Java servlet 对 JavaScript 的响应

java - 将项目从 Windows 导出到 Debian 时出现 Mysql 错误

java - Spring/Hibernate 添加一个在关闭 EntityManagerFactory 之前运行的关闭钩子(Hook)

Hibernate/Spring 应用程序 - 导出到 CSV

java - Orders 和 Employee 之间的 JPA 关系

Java:字体的磅值与其呈现范围之间是否存在线性相关性?

Java - 当我尝试获取源代码时,服务器返回了 HTTP 响应代码 : 400

java - Hibernate:有什么方法可以将带有 utf-8 字符的对象保存到 latin1 编码的表中吗?

java - Gson 泛型属性