当前位置: 首页 > 知识库问答 >
问题:

Spring数据JPA-使用标志列的存储库findAll方法

子车俊哲
2023-03-14

我想在存储库中使用findAll方法,但我希望它只返回具有特定值的实体。例如,我希望它只返回活动的实体=1。有办法吗?

现在,我必须为我所有的存储库编写如下内容:

@Query("select p from Parameter p where p.active = 1")
public List<Parameter> findAll();

我没有使用findOne方法,而是在我所有的存储库中编写:

@Query("select p from Parameter p where p.active = 1 and p.id=?1")
public Parameter findById(Long id);

有没有更好的方法对所有查询应用一揽子过滤器?

共有1个答案

幸弘光
2023-03-14

如果您可以考虑从findAll转移到另一个策略,请查看这里的文档http://docs.spring.io/spring-data/jpa/docs/1.5.1.RELEASE/reference/html/jpa.repositories.html#jpa.sample-app.finders.strategies

JPA模块支持将查询手动定义为字符串或从方法名派生查询。

因此,在您的情况下,如果您想检索活动=1的所有实体,您可以编写以下内容:

public List<Parameter> findByActive(Integer active);

您也可以这样组合方法名:

public Parameter findByIdAndActive(Long id, Integer active);

方法签名到要执行的查询之间的转换是自动的。

编辑:如果您正在使用boolean for active,还可以使用类似

public List<Parameter> findByActiveTrue();
//or
public List<Parameter> findByActiveFalse();
 类似资料:
  • 是否有一种方法可以使通用Spring数据JPA存储库正确处理类似的方法?例如只返回狗,而不返回所有动物?或者至少,最好的变通方法是什么? 它的工作几乎完美,保存每一个动物在自己的桌子上,等等。唯一的问题是:同时返回水豚和狗。这个答案解释说: 这只有在域类使用单表继承时才起作用。我们在引导时能得到的关于domain类的唯一信息是它将是Product对象。因此,对于像findAll()甚至findBy

  • 我试图获取一个列表从数据库和findAll()返回空列表。我有多个jpa存储库,但只有一个不工作。这是代码: 这就是实体: 当我调用product类别epository.findAll()时,它返回空列表,因此我在数据库中有许多条目。谢谢你的帮助!

  • 它是否将其存储在缓存中?我有一个应用程序,但应用程序中没有任何地方。属性是提到的db详细信息。我可以通过邮递员存储数据和查询它。

  • 我突然想到,可以用三个基于泛型的类来替换每个对象类型的多个类,从而节省大量的样板代码。我不是很清楚该怎么做,事实上这是不是一个好主意?

  • 我有一个控制器尝试用可选字段搜索。JPA实体类定义为: