@使用自定义类Spring Boot Java进行查询注释

@使用自定义类Spring Boot Java进行查询注释,java,sql,spring,spring-boot,spring-data-jpa,Java,Sql,Spring,Spring Boot,Spring Data Jpa,对于JPA用户的问题是,以下是可能的吗 @Query(value = "SELECT * FROM Users u WHERE u.status = :sampleClass.status", nativeQuery = true) List<SampleClass> findBySampleClass(SampleClass sampleClass); @Query(value=“SELECT*FROM Users u,其中u.status=:sampleClass.sta

对于JPA用户的问题是,以下是可能的吗

@Query(value = "SELECT * FROM Users u WHERE u.status = :sampleClass.status", 
  nativeQuery = true)
List<SampleClass> findBySampleClass(SampleClass sampleClass);
@Query(value=“SELECT*FROM Users u,其中u.status=:sampleClass.status”,
nativeQuery=true)
列出findBySampleClass(SampleClass SampleClass);

注意我在
@Query
注释中尝试访问
SampleClass
的方式。无法实现这一点,而是选择了标准并构建了我的查询老派。

您可以使用JPA文档中提到的方法:

    @Query(value = "SELECT * FROM Users u WHERE u.status = ?1",
 nativeQuery = true)
    List<SampleClass> findBySampleClass(String status);
@Query(value=“SELECT*FROM Users u,其中u.status=?1”,
nativeQuery=true)
列出findBySampleClass(字符串状态);
更多选项请参考官方文件:


不确定您为什么要传递整个对象。您想解释一下吗?

您可以使用JPA文档中提到的方法:

    @Query(value = "SELECT * FROM Users u WHERE u.status = ?1",
 nativeQuery = true)
    List<SampleClass> findBySampleClass(String status);
@Query(value=“SELECT*FROM Users u,其中u.status=?1”,
nativeQuery=true)
列出findBySampleClass(字符串状态);
更多选项请参考官方文件:


不确定为什么要传递整个对象。是否要解释一下?

=之间不应该有任何空格:,因此将查询更改为下面的一个

SELECT * FROM Users u WHERE u.status =: sampleClass.status
同样,作为您的mathod名称
findBySampleClass
,您正在尝试基于SampleClass查找,那么为什么只传递SampleClass的一个参数而不是object

请参阅以了解更多信息

您也可以通过索引参数(如
?1
)来使用下面的方法

@Query(value = "select id,name,roll_no from USER_INFO_TEST where rollNo = ?1", nativeQuery = true)
ArrayList<IUserProjection> findUserUsingRollNo(String rollNo);
@Query(value=“从用户信息测试中选择id、name、roll\u no,其中rollNo=?1”,nativeQuery=true)
ArrayList FindUserSingRollNo(字符串rollNo);
参考:引用Spring数据JPA


另外,请参见如何使用命名本机查询。

=之间不应该有任何空格:,因此将查询更改为下面的一个

SELECT * FROM Users u WHERE u.status =: sampleClass.status
同样,作为您的mathod名称
findBySampleClass
,您正在尝试基于SampleClass查找,那么为什么只传递SampleClass的一个参数而不是object

请参阅以了解更多信息

您也可以通过索引参数(如
?1
)来使用下面的方法

@Query(value = "select id,name,roll_no from USER_INFO_TEST where rollNo = ?1", nativeQuery = true)
ArrayList<IUserProjection> findUserUsingRollNo(String rollNo);
@Query(value=“从用户信息测试中选择id、name、roll\u no,其中rollNo=?1”,nativeQuery=true)
ArrayList FindUserSingRollNo(字符串rollNo);
参考:引用Spring数据JPA


另外,请参阅关于如何使用命名本机查询执行此操作的说明。

您尝试执行的操作是不可能的,因为在本机查询中,您仅支持绑定直接变量,而无法对对象执行奇特的访问。您可以通过使用JPQL或HQL(如果您使用hibernate作为ORM提供程序)来执行类似的操作


但在更高层次上存在一个问题。您正在调用方法
findBySampleClass
,将
SampleClass
作为输入参数传递,并期望
SampleClass
作为输出。这意味着您将从语义角度返回对象本身。这是可疑的。但更进一步,您在实际查询规范中做了一些不同的事情;您正在使用传入对象的
status
属性。这与方法名应该说明查询内容的约定不同。在这种情况下,正确的(也是最自然的)方法是将
status
作为参数传递,将方法重命名为
findBySampleClassStatus
findByStatus
,因为在本机查询中,您只支持绑定直接变量,您不能对对象进行奇特的访问。您可以通过使用JPQL或HQL(如果您使用hibernate作为ORM提供程序)来执行类似的操作


但在更高层次上存在一个问题。您正在调用方法
findBySampleClass
,将
SampleClass
作为输入参数传递,并期望
SampleClass
作为输出。这意味着您将从语义角度返回对象本身。这是可疑的。但更进一步,您在实际查询规范中做了一些不同的事情;您正在使用传入对象的
status
属性。这与方法名应该说明查询内容的约定不同。在这种情况下,正确的(也是最自然的)方法是将
status
作为参数传递,将方法重命名为
findBySampleClassStatus
findByStatus

,以澄清问题,因此要传递整个对象进行查询,不只是状态吗?:sampleClass.status-是问题所在..请提供准确的值作为:调用方法的状态。为了澄清,您希望将整个对象传递给查询,而不仅仅是状态吗?:sampleClass.status-是问题所在..请提供准确的值作为:调用方法的状态。虽然此链接可以回答问题,最好在这里包括答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能无效。-@MihaiChelaru-已按照建议更新了答案。在将来的回答中,我们会记住这个建议。虽然这个链接可以回答这个问题,但最好在这里包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能无效。-@MihaiChelaru-已按照建议更新了答案。我会记住这个建议,以便将来回答。