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的多个子类,需要知道它是哪个“子类”,而不需要在持久性中明确地添加它。请您清楚地解释一下您想要什么?这将返回鉴别器值,而不是实际的类。您需要一个与类名匹配的鉴别器值,但情况并非总是如此。