我有一个表我不能用大约该结构JPA2:如何仅将某些表行映射到实体?
ID, name, purpose, rubbish...
1, foo, PRICING, ...
2, bar, INVENTORY, ...
3, bar, PRICING, ...
什么是只与目的=定价一个实体的行映射的首选方式改变?有没有办法做到这一点与JPA批注或我需要一个视图?
我有一个表我不能用大约该结构JPA2:如何仅将某些表行映射到实体?
ID, name, purpose, rubbish...
1, foo, PRICING, ...
2, bar, INVENTORY, ...
3, bar, 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,则可以使用过滤器。很好的例子可以找到here。
这是使用供应商特定扩展非常好的一个示例,但它们将您锁定到一个实现。有可能其他实现(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()
}
+1为理念,但不会只有一个工作@ MappedSuperclass父级? – 2011-01-19 15:47:11
它应该只是工作。我从DiscriminatorValue API javadoc中获取了代码示例:http://download.oracle.com/javaee/5/api/javax/persistence/DiscriminatorValue.html – adrianboimvaser 2011-01-19 15:52:03