Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA Spring存储库日期筛选返回空数组_Java_Spring_Hibernate_Spring Data_Spring Data Jpa - Fatal编程技术网

Java JPA Spring存储库日期筛选返回空数组

Java JPA Spring存储库日期筛选返回空数组,java,spring,hibernate,spring-data,spring-data-jpa,Java,Spring,Hibernate,Spring Data,Spring Data Jpa,在两个日期之间调用查询将返回一个空数组,但它不应该返回 我正在使用这个“简单”的spring存储库: import java.time.LocalDate; import java.util.List; import org.springframework.data.repository.CrudRepository; import com.company.app.domain.DailySales; public interface DailySalesRepo extends CrudRe

在两个日期之间调用查询将返回一个空数组,但它不应该返回

我正在使用这个“简单”的spring存储库:

import java.time.LocalDate;
import java.util.List;
import org.springframework.data.repository.CrudRepository;
import com.company.app.domain.DailySales;

public interface DailySalesRepo extends CrudRepository<DailySales, Long> {

    public List<DailySales> findByDateBetween(LocalDate start, LocalDate end);
}
将该跟踪复制到SQL控制台将返回101项:

select dailysales0_.id as id1_0_, dailysales0_.amount as amount2_0_, dailysales0_.currency as currency3_0_, dailysales0_.date as date4_0_, dailysales0_.tenantId as tenantId5_0_ from agg_dailysells dailysales0_ where dailysales0_.date between "2016-02-01" and "2016-05-12";
结果:返回101行

但是
List result
得到一个空列表

我做错了什么

我的实体看起来像:

@Entity
@Table(name="agg_dailysells")
public class DailySales implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
    private Integer tenantId;
    private LocalDate date;
    private Double amount;
    private Integer currency;

    ... getters and setters go here ...

据我所知,Hibernate4不支持Java8时间API。您应该使用
java.util.Date
而不是任何java8时间抽象,或者升级到Hibernate5,并将
Hibernate-java8
模块添加到依赖项中。有关Java
LocalDate
和Hibernate 4的更多信息,您可以看到这一点。

Hibernate 4不支持Java 8 LocalDate或LocalDateTime API。原因是Hibernate4和JPA2.1是在Java8之前发布的\

幸运的是,JPA2.1支持将实体属性转换为数据库列表示,反之亦然。您可以使用此界面在日期本地日期之间进行转换

您必须重写两个方法,一个用于实体属性到数据库列,另一个用于数据库列到属性

@Converter(autoApply = true)
public class LocalDateAttributeConverter implements AttributeConverter<LocalDate, Date> {

    @Override
    public Date convertToDatabaseColumn(LocalDate locDate) {
        return (locDate == null ? null : Date.valueOf(locDate));
    }

    @Override
    public LocalDate convertToEntityAttribute(Date sqlDate) {
        return (sqlDate == null ? null : sqlDate.toLocalDate());
    }
}

看看这个博客。

哪个版本的hibernate和Spring数据?我使用的是org.hibernate:hibernate entitymanager:4.2.0.Final和org.springframework.Data:Spring数据jpa:1.9.4。RELEASE@BlackBishop如果仍然相关,请看我的答案。
@Entity
@Table(name="agg_dailysells")
public class DailySales implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
    private Integer tenantId;
    private LocalDate date;
    private Double amount;
    private Integer currency;

    ... getters and setters go here ...
@Converter(autoApply = true)
public class LocalDateAttributeConverter implements AttributeConverter<LocalDate, Date> {

    @Override
    public Date convertToDatabaseColumn(LocalDate locDate) {
        return (locDate == null ? null : Date.valueOf(locDate));
    }

    @Override
    public LocalDate convertToEntityAttribute(Date sqlDate) {
        return (sqlDate == null ? null : sqlDate.toLocalDate());
    }
}
@Entity
@Table(name="agg_dailysells")
public class DailySales implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
    private Integer tenantId;

    @Column
    @Convert(converter = LocalDateAttributeConverter.class)
    private LocalDate date;

    private Double amount;
    private Integer currency;