Java 如何使用@Query获取可选值
我有一个带有一些查询的customer repository类Java 如何使用@Query获取可选值,java,spring-boot,java-8,spring-data-jpa,Java,Spring Boot,Java 8,Spring Data Jpa,我有一个带有一些查询的customer repository类 @Repository public interface CustomerRepository extends JpaRepository<Customers, Long>, JpaSpecificationExecutor<Customers> { @Query("select c from Customers c where c.id = ?1 and c.deleted = false")
@Repository
public interface CustomerRepository extends JpaRepository<Customers, Long>, JpaSpecificationExecutor<Customers> {
@Query("select c from Customers c where c.id = ?1 and c.deleted = false")
Optional<Customers> findCustomerById(Long id);
}
运行应用程序时,我收到以下消息
原因:org.hibernate.QueryException:无法解析属性:已删除的:com.ntric.hariom.inventory.domain.Customers
位于org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:73)
位于org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:67)
位于org.hibernate.persister.entity.AbstractEntityPersister.toType(AbstractEntityPersister.java:1873)
位于org.hibernate.hql.internal.ast.tree.FromElementType.getPropertyType(FromElementType.java:393)
堆栈跟踪非常大,所以我只粘贴错误部分
原因:org.hibernate.QueryException:无法解析属性:
删除
这是因为该属性被称为isDeleted
。将其重命名为deleted
,这部分问题将得到解决。此外,它还可以将getter命名为isDeleted
,这更适合于布尔值
现在进入问题的第二部分,这更像是关于改进的建议。您不需要本机查询,下面的查询方法应该可以完成这项工作
Optional<Customer> findByIdAndDeletedFalse(Long id);
可选findbyianddeletedfalse(长id);
请注意,实体已重命名,这使其更容易混淆。能否显示代码我最近编辑的问题与我的问题完全不同。发布异常的完整而准确的堆栈跟踪,并发布Customers实体的代码(应该真正命名为Customer)。同时发布存储库的完整代码,包括导入。现在错误似乎与entity class@MilanPaudyal中的“deleted”属性有关。请将字段
isDeleted
重命名为deleted
。
Optional<Customer> findByIdAndDeletedFalse(Long id);