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