Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 来自主键的JPA查询类_Java_Jpa_Persistence - Fatal编程技术网

Java 来自主键的JPA查询类

Java 来自主键的JPA查询类,java,jpa,persistence,Java,Jpa,Persistence,如果我有实体的主键,我如何只查询实体的类?我不想检索整个对象,当我只对该对象的类感兴趣时,这似乎是不必要的。我试过了 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 用法示例: pu

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

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;
}

公共静态类这将为您提供实际类:

从MyEntity e中选择类型(e),其中e.id=?1
Class clazz=entityManager.createQuery(查询,Class.Class)
.setParameter(1,id)
.getSingleResult();
下面给出了鉴别器值:

从MyEntity e中选择e.class,其中e.id=?1
String discr=entityManager.createQuery(查询,String.class)
.setParameter(1,id)
.getSingleResult();

我有多个实体的子类在持久化中,它们的id都很长。我想查询长id源类,这有什么关系?我有MyEntity的多个子类,需要知道它是哪个“子类”,而不需要在持久性中明确地添加它。请您清楚地解释一下您想要什么?这将返回鉴别器值,而不是实际的类。您需要一个与类名匹配的鉴别器值,但情况并非总是如此。