java– 使用Date参数时的Spring Data JPA日期“之间”查询问题

java– 使用Date参数时的Spring Data JPA日期“之间”查询问题,第1张

概述在我的应用程序中,我使用Spring Data和hibernate作为JPA提供程序来持久化和读取数据.我有顶级实体类:@Entity @Getter @Setter @Table(name = 'operation') @Inheritance(strategy = InheritanceType.JOINED) @EqualsAndHashCode(of

在我的应用程序中,我使用Spring Data和hibernate作为JPA提供程序来持久化和读取数据.

我有顶级实体类:

@Entity@Getter @Setter@table(name = "operation")@inheritance(strategy = inheritanceType.JOINED)@EqualsAndHashCode(of = {"operationID"})public abstract class Operation implements Serializable {    public static final int OPERATION_ID_LENGTH = 20;    @ID    @Column(name = "operation_ID",length = OPERATION_ID_LENGTH,nullable = false,columnDeFinition = "char")    private String operationID;    @Column(name = "operation_type_code")    @Getter(AccessLevel.NONE)    @Setter(AccessLevel.NONE)    private String operationTypeCode;    @Temporal(TemporalType.TIMESTAMP)    @Column(name = "begin_timestamp",nullable = false)    private Date beginTimestamp = new Date();    @Temporal(TemporalType.TIMESTAMP)    @Column(name = "end_timestamp")    private Date endTimestamp;    @Column(name = "operation_number",length = 6,columnDeFinition = "char")    private String operationNumber;    @Enumerated(EnumType.STRING)    @Column(name = "operation_status",length = 32,nullable = false)    private OperationStatus status;    @ManyToOne(optional = false)    @JoinColumn(name = "user_ID")    private User user;    @ManyToOne    @JoinColumn(name = "terminal_ID")    private Terminal terminal;    @Column(name = "training_mode",nullable = false)    private boolean trainingMode;}

对于继承的类,我有相应的存储库:

public interface ConcreteOperationRepository extends JpaRepository

我用以下方法进行集成测试:

@Transactional@Testpublic voID shouldFindOperationByPeriodAndStatusAnDWorkstationID() {    Date from = new Date(Calendar.getInstance().getTime().getTime());    List

但是由于结果为空而我使用MysqL数据库时此测试失败(但是当我切换到HsqlDB时通过)

此外,如果我在测试开始时将延迟“Thread.sleep(1000)”延迟一秒,就在第一行之后,则此测试通过.

当我从Hibernate日志执行sql时,它给了我正确的结果.我的代码出了什么问题?

最佳答案在JPA中,日期需要时间提示.通常,您可以在设置JPA query参数时设置TemporalType:

query.setParameter("from",from),TemporalType.TIMESTAMP);

使用Spring Data,您需要使用@Temporal注释,因此您的查询将变为:

@query("SELECT o FROM ConcreteOperation o WHERE o.beginTimestamp BETWEEN :from AND :to AND o.status = :status AND o.terminal.deviceid = :deviceid AND o.trainingMode = :trainingMode")Collection
总结

以上是内存溢出为你收集整理的java – 使用Date参数时的Spring Data JPA日期“之间”查询问题全部内容,希望文章能够帮你解决java – 使用Date参数时的Spring Data JPA日期“之间”查询问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1260842.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)