hibernate Spring Data Jpa 3.0.0错误与YesNoConverter和JpaRepository-query

xj3cbfub  于 2023-04-06  发布在  Spring
关注(0)|答案(1)|浏览(140)

我正在使用hibernate YesNoConverter在数据库中将布尔值存储为'Y'/'N'。目前我正在迁移到Sping Boot 3.0(使用spring-data-jpa:3.0.0),自定义JpaRepository-query“findByActiveFalse”崩溃。

List<ExampleEntity> findByActiveFalse();

错误:

org.springframework.dao.DataIntegrityViolationException: JDBC exception executing SQL [select e1_0.id,e1_0.active from example_entity e1_0 where e1_0.active=0]; SQL [n/a]

Hibernate YesNoConverter不会被触发,所以有一个零而不是'N'。(在升级到Sping Boot 3.0之前,我有一个自己的转换器实现,它有同样的问题)
使用“findByActive(false)”,查询可以正常工作。
以下是我的消息来源:
JpaRepository:https://github.com/GuybrushDevwood/boolean-converter-demo/blob/main/src/main/java/com/example/booleanconverterdemo/example/ExampleEntityRepo.java
实体:https://github.com/GuybrushDevwood/boolean-converter-demo/blob/main/src/main/java/com/example/booleanconverterdemo/example/ExampleEntity.java
测试用例:https://github.com/GuybrushDevwood/boolean-converter-demo/blob/main/src/test/java/com/example/booleanconverterdemo/example/ExampleEntityRepoTest.java
我必须配置任何东西才能像以前一样工作吗?

c86crjj0

c86crjj01#

既然你不想重构你的代码,这是一个很好的临时解决方案。

public interface ExampleRepository extends JpaRepository<ExampleEntity, String> {
    List<ExampleEntity> findByActive(boolean active);

    default List<ExampleEntity> findByActiveFalse(){
        return findByActive(false);
    }
}

备选方案:

@Query("select e FROM exampleentity where e.active= true");

使用标准构建器:

builder.equals(root.get("repeat), true);

相关问题