Spring DATA JPA 如何编写一个使用字段常量值来获取数据的方法

问题描述 投票:0回答:3

您好,我正在使用 Spring Data JPA,并且想要使用功能从方法名称生成查询。我在数据库中有一个活动字段,其值只有 0 和 1。我想获取活动值为 1 的所有数据。 这是一个常量值,因此我不想将此值作为方法参数传递。

请建议同样的方法。

示例:

我有一个实体 EmailRef

public class EmailRef {

    /* other vareialbe */

    @Column(name="is_active") /* this is the field which value is 0 and 1 in DB*/
    private Integer active;

    /* setter getter method */       
}

这是我想编写方法的存储库,该方法将获取 active 为 1 的所有数据;

public interface EmailRefRepositry extends JpaRepository<EmailRef, Long> {          

    @Query("select * from email_reference where is_active=1") /* this is the query I want to convert into method*/
    List<EmailRef> findByActive(); /*I want to write method like that which will fetch all data form table where active field value is 1*/
}

我被困在恒值请建议

谢谢 苏丹舒

java spring jpa spring-data-jpa spring-data
3个回答
5
投票

如果您可以将该整数更改为布尔值,您可以执行以下操作:

在您的实体中:

private Boolean                 active;

在你的仓库中:

List<EmailRef> findByActiveIsTrue();

2
投票

试试这个:

public interface EmailRefRepositry extends JpaRepository<EmailRef, Long> {          

    @Query("select e from EmailRef e where e.active=1")
    List<EmailRef> findOnlyActiveWithQuery();

    default List<EmailRef> findOnlyActive() {
        findByActive(1);
    }

    default List<EmailRef> findNotActive() {
        findByActive(0);
    }

    List<EmailRef> findByActive(Integer active);
}

0
投票

我认为你不能使用 Spring JPA 的魔法来做你想做的事情,其中从方法名称派生查询(除非你能够按照 @kimy82 在他们的解决方案中建议的那样做)。当然,您可以在存储库方法上使用 @Query 注释。但是,您定义的查询将不起作用,因为它是本机查询,并且您没有指定这一点。尽管我推荐第一个,但以下是对查询注释的两个可能的修复:

@Query("select e from EmailRef e where e.active=1")

@Query("select * from email_reference where is_active=1", nativeQuery=true)
© www.soinside.com 2019 - 2024. All rights reserved.