您好,我正在使用 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*/
}
我被困在恒值请建议
谢谢 苏丹舒
如果您可以将该整数更改为布尔值,您可以执行以下操作:
在您的实体中:
private Boolean active;
在你的仓库中:
List<EmailRef> findByActiveIsTrue();
试试这个:
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);
}
我认为你不能使用 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)