我有一些表有一些公共列,我认为在创建实体时我会让实体扩展一个定义所有映射的类:
@MappedSuperclass
public class AbstractLogMaster implements Serializable
{
@Id
@Basic(optional = false)
@Column("id")
protected long id;
@Column("field1")
protected String field1;
@Column("field2")
protected String field2;
public long getId()
{
return id;
}
public void setId(long id)
{
this.id = id;
}
etc...
}
@Entity
@Table(name = "logwork")
public class LogWork extends AbstractLogMaster implements Serializable
{
@Column("field3")
protected int field3;
public int getField3()
{
return field3;
}
}
在查询中使用它Predicate p1 = builder.equal(logWork.get(LogWork_.field1), f1);
会导致 NPE(特别是因为这logWork.get(LogWork_.field1)
部分 - @StaticMetaModel 似乎不适用于映射的超类)
查看JPA 文档,我发现:
映射的超类不能被查询,也不能在 EntityManager 或 Query 操作中使用。您必须在 EntityManager 或 Query 操作中使用映射超类的实体子类。映射的超类不能成为实体关系的目标。映射的超类可以是抽象的或具体的。
这是否意味着我在映射超类中映射的所有字段都不能被条件查询中的扩展实体使用?如果是这样,将映射放入超类有什么意义?如果没有,我做错了什么?