我有一张表,我无法改变这个结构
ID, name, purpose, rubbish...
1, foo, PRICING, ...
2, bar, INVENTORY, ...
3, bar, PRICING, ...
仅将具有目的= PRICING的行映射到实体的首选方法是什么?有没有办法用JPA注释做到这一点,还是我需要一个视图?
答案 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()
}