首页 > 解决方案 > 当实体具有带转换器的字段时,无法使用 JpaRepository 获取实体列表

问题描述

我有一个具有以下字段的实体:

public class Person {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;
    private String name;
    private boolean isMale;
    private int age;
    @Convert(converter = DateToLongConverter.class)
    private Long birthdate;
}

转换器:

@Converter
public class DateToLongConverter implements AttributeConverter<Long, Date> {
    @Override
    public Date convertToDatabaseColumn(Long attribute) {
        return new Date(attribute);
    }

    @Override
    public Long convertToEntityAttribute(Date dbData) {
        return dbData.getTime();
    }
}

规格:

public class PersonSpecification implements Specification<Person> {
    @Override
    public Predicate toPredicate(Root<Person> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
        List<Predicate> predicates = new ArrayList<>();
        predicates.add(builder.lessThan(root.get("birthdate"), new Date().getTime()));
        return builder.and(predicates.toArray(new Predicate[0]));
    }
}

当我使用我的接口扩展 JpaRepository 和 Specification 有条件的生日字段时,我得到一个 SQL 语法错误 - entityManager 发出一个没有引号的日期请求

SELECT person0_.id as id1_0_, person0_.age as age2_0_, person0_.birthdate as birthdat3_0_, person0_.is_male as is_male4_0_, person0_.name as name5_0_ 
FROM person person0_ 
WHERE person0_.birthdate<Wed May 12 20:28:28 MSK 2021

有没有办法修复查询创建或任何解决方法?

标签: javahibernate-criteriacriteria-apiconverters

解决方案


推荐阅读