如何使用Eclipse Link选择对象的DiscriminatorColumn

时间:2016-01-22 14:05:28

标签: java jpa eclipselink

我有一个抽象的实体用户和一些继承的类,例如使用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();

但没有一个对我有用,我得到了IllegalArgumentException

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

Eclipe Link有可能吗?

1 个答案:

答案 0 :(得分:1)

感谢Neil Stockton我通过获取类名来找到解决方案,而不是DiscriminatorValue,但它的效果还不错。使用TYPE(u)代替u.class可以正常工作。

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