当前位置: 首页 > 面试题库 >

如何在JPA 2.0中创建类似“实例”的查询?

陆才俊
2023-03-14
问题内容

假设我们有一个抽象的@Entity Animal,以及几个扩展Animal的实体类,包括Dog,Cat,Monkey和Bat。

如何根据扩展实体的类过滤结果?

示例 :有复选框,用户可以在其中选择要检索的实体。

[ ] Dog
[X] Cat
[X] Monkey
[ ] Bat

现在,我想使用在Animal类中定义的(Named)Query检索实体。我可以在查询中放入哪种查询参数,以便仅返回Cat和Monkey对象?


问题答案:

我不确定JPA是否支持它,但是在Hibernate中做到这一点的方法,无论继承策略如何,因此即使您没有区分符(或未将其映射为属性),也要使用隐式class属性:

String jpql = "select a from Animal a where a.class in (:classes)";
Query q = em.createQuery(jpql).setParameter("classes", 
                                            Arrays.asList(Cat.class, Monkey.class));

编辑:

我刚刚发现在JPA2中使用TYPE运算符是可能的:

String jpql = "SELECT a FROM Animal a WHERE TYPE(a) IN :classes";
Query q = em.createQuery(jpql).setParameter("classes", 
                                            Arrays.asList(Cat.class, Monkey.class));


 类似资料:
  • 我是Haskell的初学者,正在尝试学习类型类和类型。我有以下示例(它代表了我正在研究的代数中的一个实际问题),其中我定义了一个仅包装Num实例的类型,以及一个定义二进制操作的typeclass。 当将定义为此实例时,我意识到我希望能够使用类型“改变”函数。需要说明的是:我想提供一个函数,并返回一个新的类型,它是的一个实例。假设我想这样做5次、10次,唯一的区别是不同的函数。上面的代码我当然可以复

  • 问题内容: 我有类名称的列表,想动态创建它们的实例。例如: 如何在Python中动态创建该实例?谢谢! 问题答案: 这通常被称为反思或自省。找出类似的问题,这些问题可以回答您要尝试做的事情: Python是否具有与Java类forname等效的名称 您可以使用字符串实例化Python中的类吗

  • 作为方法存储在CustomButton类中的ActionListener: 和按钮中的代码段:

  • 问题内容: 假设这是一个抽象类,具有多个可以重写的方法。 在Java中,我可以执行以下操作: 如何在Kotlin中做同样的事情? 问题答案: 从Kotlin官方语言文档中: 适用于您手头的问题: 正如Peter Lamberg指出的那样-如果匿名类实际上是功能接口的实现( 即不是抽象类的实现 ),则可以使用SAM Conversions 进一步简化该语句: 还请注意有关Java和Kotlin中定义

  • 问题内容: 我正在创建一个类及其子类,需要在其中调用父级的静态方法以返回子级实例。 问题答案: 该静态方法被调用,其值是类对象,子类,你把它称为后的构造。因此,您可以使用实例化它:

  • 问题内容: 我尝试过使用字符串以多种方式创建类的实例,但是 在Swift 3中 都没有。 以下是我尝试过的无法使用的Swift 3之前的解决方案 -使课堂成为目标C课堂 -使用NSString值指定类(使用和不使用@objc属性) 我没有做正确的事,但没有在线找到任何解决方案。 如何在Swift 3中使用字符串创建类的实例? 问题答案: 您可以尝试以下方法: 像这样使用func: