如何使用 Eclipse select 对象的 DiscriminatorColumn Link

How to select object's DiscriminatorColumn with Eclipse Link

我有一个抽象的实体用户和一些继承的 类,例如使用 DiscriminatorColumn 作为继承方法的患者。

@Entity
@DiscriminatorColumn(name = "USER_TYPE", discriminatorType = DiscriminatorType.STRING)
public abstract class User {
    ...
}

@Entity
@DiscriminatorValue("patient")
public class Patient extends User {
    ...
}

我需要知道对象的类型。我找到了 Hibernate 的解决方案,但我使用 Eclipse Link 并且我想编写一个脚本来从数据库中检索 DiscriminatorColumn。我试过了

em.createQuery("SELECT u.user_type FROM User u WHERE u.username = :username", String.class)
            .setParameter("username", username)
            .getSingleResult();

em.createQuery("SELECT u.class FROM User u WHERE u.username = :username", String.class)
            .setParameter("username", username)
            .getSingleResult();

但是 none 对我有用,我得到 IllegalArgumentException

The state field path 'u.class' cannot be resolved to a valid type.

在 Eclipe 中可以吗 Link?

感谢 Neil Stockton,我通过获取 class 名称而不是 DiscriminatorValue 找到了解决方案,但它工作得很好。使用 TYPE(u) 而不是 u.class 效果很好。

em.createQuery("SELECT TYPE(u) FROM User u WHERE u.username = :username", Class.class)
            .setParameter("username", username)
            .getSingleResult().getSimpleName();