我有一些实体继承了下面的AbstractEntity。
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class AbstractEntity implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private int id;
@Column(insertable = false, updatable = false)
private String dtype;
public String getDtype() {
return dtype;
}
}
然后我坚持一些扩展AbstractEntity的实体。
ConcreteEntity concreteEntity = new ConcreteEntity();
em.persist(concreteEntity);
如果在其他一些ejb中使用
获取此实体someEntity = query.getResultList().get(0);
返回的实例将有dtype == null
直到
em.refresh(someEntity);
我想这是因为实体管理器返回一个缓存的实例,它不知道在em.persist()上插入了哪个dtype。
但我的问题是如何让查询返回实例设置dtype?
我正在使用glassfish 3.1.2.2(默认的jpa提供程序和包含的javadb)
答案 0 :(得分:1)
为什么你甚至需要它? dtype
是ORM所需的内部实现细节。您可以简单地使用Java类型来区分子类。例如。在Facelets上下文中,您可以尝试.getClass().getSimpleName()
:
#{entity.class.simpleName == 'ConcreteEntity'}
不完全清洁,但有效。