jpa2 hibernate使用现有实体从视图加载数据

时间:2011-10-24 21:37:28

标签: java hibernate view jpa-2.0

在我的JPA2 / Hibernate应用程序中,我有表USERS和匹配实体User + DAO。

现在,我创建了视图V_USERS,其中包含来自表USERS的过滤数据。

我可以重用实体用户来查询此视图中的数据吗?

1 个答案:

答案 0 :(得分:1)

不,你不能。您可以将两个不同的类映射到同一个表中,但不能反过来。

这种限制的原因很简单,JPA提供商如何知道您在以下查询中考虑过哪个表:

em.createQuery("SELECT u FROM User u");

但是您可能希望创建包含所有属性的基类AbstractUser,并且必须清空子类:User和例如VUser。后两个类将具有到不同表/视图的映射。请参阅MappedSuperclass及其中的示例。

@MappedSuperclass
public abstract class AbstractUser {
    //all your columns/JPA mapping go here
}

@Entity
@Table(name="USERS")
public class User extends AbstractUser {}

@Entity
@Table(name="V_USERS")
public class VUser extends AbstractUser {}