来自主键的 JPA 查询 class

JPA query class from primary key

如果我拥有实体的主键,我将如何仅查询实体的 class?我不想检索整个对象,当我只对该对象的 class 感兴趣时,这似乎是不必要的。我试过了

SELECT o.dtype FROM MyEntity o WHERE id = ?1

但这不起作用。

SELECT o.dtype FROM MyEntity o WHERE o.id = ?1

您使用 MyEntity 的别名作为 o 使用 o 定义列 id

实际上这个查询有效:

SELECT o.class FROM MyEntity o WHERE id = ?1

用法示例:

public static Class<? extends MyEntity> getClassOf(Long id) {
    TypedQuery<String> q = entityManager().createQuery(
            "SELECT o.class FROM MyEntity o WHERE id = ?1", 
            String.class);
    q.setParameter(1, id);
    q.setMaxResults(1);
    List<String> r = q.getResultList();
    if (r.size() == 0)
        return null;

    for (Package p : Package.getPackages()){
        if (p.getName().startsWith("mypackage.prefix")){
            try {
                return (Class<? extends MyEntity>) Class.forName(p.getName() + "." + r.get(0));
            } catch (ClassNotFoundException e) {
                continue;
            }
        }
    }
    return null;
}

这会给你实际的 class:

SELECT TYPE(e) FROM MyEntity e WHERE e.id = ?1
Class<?> clazz = entityManager.createQuery(query, Class.class)
    .setParameter(1, id)
    .getSingleResult();

下面为您提供鉴别器值:

SELECT e.class FROM MyEntity e WHERE e.id = ?1
String discr = entityManager.createQuery(query, String.class)
    .setParameter(1, id)
    .getSingleResult();