[英]JPA2: How to map only certain table rows to an entity?
我有一张表,我无法改变这个结构
ID, name, purpose, rubbish...
1, foo, PRICING, ...
2, bar, INVENTORY, ...
3, bar, PRICING, ...
仅将具有目的= PRICING的行映射到实体的首选方法是什么? 有没有办法用JPA注释做到这一点,还是我需要一个视图?
您可以使用SINGLE_TABLE继承策略,并使用“目的”作为鉴别器列,如下所示:
@Entity
@Table(name="THE_TABLE")
@Inheritance(strategy=SINGLE_TABLE)
@DiscriminatorColumn(name="purpose", discriminatorType=STRING)
@DiscriminatorValue("PRICING")
public class Pricing{ ... }
我不相信纯JPA支持这一点。
如果您正在使用Hibernate,则可以使用过滤器。 很好的例子可以在这里找到。
这是使用特定于供应商的扩展非常好的一个示例,但它们将您锁定到一个实现。 其他实现(OpenJPA,EclipseLink ......)也可能支持这一点,但我还没有看过它们。
如果我正确理解您的问题,那么您只想选择目标=定价的行。
有基本步骤:(1)创建实体,(2)创建查询。 该实体将使用注释并与此类似:
@Entity
public class Foo
{
String name;
String inventory;
....
}
然后,您只需构造并执行一个查询:
.....
@PersistenceContext
EntityManager entityManager;
.....
public List<Foo> getAllWithPricing()
{
return entityManager.createQuery("select o from Foo o where o.purpose='PRICING'", Foo.class).getResultList()
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.