0

我有一些实体继承了如下所示的 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)

4

1 回答 1

1

为什么你甚至需要它?dtype是 ORM 需要的内部实现细节。您可以简单地使用 Java 类型来区分子类。例如,在 Facelets 上下文中,您可以尝试.getClass().getSimpleName()

#{entity.class.simpleName == 'ConcreteEntity'}

不完全清洁,但有效。

于 2013-02-02T20:34:52.897 回答