在我的JPA2 / Hibernate应用程序中,我有表USERS和匹配实体User + DAO。
现在,我创建了视图V_USERS,其中包含来自表USERS的过滤数据。
我可以重用实体用户来查询此视图中的数据吗?
答案 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 {}