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