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

时间:2011-01-19 14:53:15

标签: java java-ee jpa-2.0

我有一张表,我无法改变这个结构

ID, name, purpose, rubbish...
1, foo, PRICING, ...
2, bar, INVENTORY, ...
3, bar, PRICING, ...

仅将具有目的= PRICING的行映射到实体的首选方法是什么?有没有办法用JPA注释做到这一点,还是我需要一个视图?

3 个答案:

答案 0 :(得分:4)

您可以使用SINGLE_TABLE继承策略,并使用“目的”作为鉴别器列,如下所示:

@Entity
@Table(name="THE_TABLE")
@Inheritance(strategy=SINGLE_TABLE)
@DiscriminatorColumn(name="purpose", discriminatorType=STRING)
@DiscriminatorValue("PRICING")
public class Pricing{ ... }

答案 1 :(得分:0)

我不相信纯粹的JPA支持这一点。

如果您正在使用Hibernate,则可以使用过滤器。可以找到很好的例子here

这是使用特定于供应商的扩展非常好的一个示例,但它们会将您锁定到一个实现。其他实现(OpenJPA,EclipseLink ......)也可能支持这一点,但我还没有看过它们。

答案 2 :(得分:0)

如果我正确理解您的问题,那么您只想选择目标=定价的行。

有基本步骤:(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()

 }