在 spring-data-jpa 中通过布尔属性查询而不使用方法参数
Posted
技术标签:
【中文标题】在 spring-data-jpa 中通过布尔属性查询而不使用方法参数【英文标题】:Query by Boolean properties in spring-data-jpa without using method parameters 【发布时间】:2013-07-10 03:53:57 【问题描述】:是否可以不使用方法参数在 Spring Data JPA 中通过布尔属性进行查询?
基本上我希望它在不使用自定义 @Query 注释的情况下工作:
@Query("SELECT c FROM Entity c WHERE c.enabled = true")
public Iterable<Entity> findAllEnabled();
【问题讨论】:
【参考方案1】:JPA repository section查询创建有以下方法。
True findByActiveTrue() … where x.active = true
False findByActiveFalse() … where x.active = false
我的猜测是使用
@Query
public Iterable<Entity> findByEnabledTrue();
【讨论】:
谢谢@orangegoat,但你确定它有效吗?它是在后来的一些 Spring Data 版本中引入的吗?我正在使用 1.0.1 并且遇到异常:Error creation bean with name 'entityRepository': FactoryBean throw exception on object creation;嵌套异常是 java.lang.IllegalArgumentException: No property true found for type boolean 嗯,在1.1.0.RC1版本(2012-02-03)中已经引入:“支持True/False作为查询关键字(DATAJPA-132)”。标记为已接受,即使我无法测试它是否有效。 我认为如果你将它作为真/假存储在数据库中,它会起作用。如果您将其存储为“Y”/“N”,则此选项将产生 x=1 并且在将字符串与 int 进行比较时将失败。我不得不以这种方式使用它:findByX(boolean enabled) 来获得正确的查询。不知道为什么在第一种情况下翻译没有按预期发生..【参考方案2】:@Query
注释甚至可以被跳过。所以它应该像这样工作:
public Iterable<Entity> findByEnabledTrue();
【讨论】:
跳过@Query?不是真的,只检索特定字段怎么样?使用您的代码,您正在从数据库中检索实体的所有字段,这可能不是您想要的,话虽如此,我添加了您方法的另一个版本: public Iterable以上是关于在 spring-data-jpa 中通过布尔属性查询而不使用方法参数的主要内容,如果未能解决你的问题,请参考以下文章
如何在 TypeScript 中通过索引访问通用对象的属性?