针对JPA用户的问题,是否有以下可能?
@Query(value = "SELECT * FROM Users u WHERE u.status = :sampleClass.status",
nativeQuery = true)
List<SampleClass> findBySampleClass(SampleClass sampleClass);
在SampleClass
批注中通知我尝试访问@Query
的方式。无法解决此问题,而是去了Criteria并构建了我的老式查询。
答案 0 :(得分:1)
您可以使用JPA文档中提到的方法:
@Query(value = "SELECT * FROM Users u WHERE u.status = ?1",
nativeQuery = true)
List<SampleClass> findBySampleClass(String status);
有关更多选项,请参考官方文档:https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#_native_queries
不确定为什么要尝试传递整个对象。您愿意解释吗?
答案 1 :(得分:1)
= 和之间应该没有空格:,因此请将查询更改为以下一个。
SELECT * FROM Users u WHERE u.status =: sampleClass.status
还用您的数学名称findBySampleClass
,您试图基于SampleClass进行查找,然后为什么只传递SampleClass的一个参数而不是对象?
请参见this,以保持清晰。
您还可以通过索引?1
之类的参数来像下面一样使用。
@Query(value = "select id,name,roll_no from USER_INFO_TEST where rollNo = ?1", nativeQuery = true)
ArrayList<IUserProjection> findUserUsingRollNo(String rollNo);
引用:来自Spring Data JPA reference docs的引用。
另外,请参见this section,了解如何使用命名的本机查询。
答案 2 :(得分:1)
您无法尝试执行的操作是因为在本机查询中,您仅支持绑定直接变量,因此无法对对象进行奇特的访问。您可以通过使用JPQL或HQL(如果您将休眠用作ORM提供程序)来执行与尝试类似的操作。
但是在更高层次上存在问题。您正在调用方法findBySampleClass
,正在传递SampleClass
作为输入参数,并期望SampleClass
作为输出。这意味着您将从语义的角度返回对象本身。这是可疑的。但是,进一步来说,您在实际的查询规范中正在做一些不同的事情。您正在使用传入的对象的status
属性。这与方法名称应说明查询内容的约定不同。在这种情况下,正确(最自然)的方法是将status
作为参数传递,将方法重命名为findBySampleClassStatus
或findByStatus
。