繁体   English   中英

JPA2:如何只将某些表行映射到实体?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM