我有一个实体是

@AllArgsConstructor
@NoArgsConstructor
@Data
@Entity
@Table(name = "REFRESH_TOKENS")
public class JwtRefreshToken {
    @Id
    @Column(name = "TOKEN")
    private String token;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "USER_ID", nullable = false)
    private Tbluser user;

    @Column(name = "EXPIRATIONDATETIME")
    private LocalDateTime expirationDateTime;

    public JwtRefreshToken(String token) {
        this.token = token;
    }

}


相应的存储库是

    JwtRefreshToken findByTokenAndAndExpirationDateTimeBefore( String token, @Param("expirationDateTime")  LocalDateTime localDateTime);


有趣的是,即使时间已过,查询也总是返回值。

例如存储在数据库中的值是2019-04-21 22:33:08

我当前的约会时间是2019-04-21T23:02:43.971
但上述findByTokenAndAndExpirationDateTimeBefore返回值。

我也想比较时间。

最佳答案

您可以启用调试输出以查看参数化查询及其参数,并将其添加到应用程序属性中

logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE


如果查询根本不使用@Param("expirationDateTime") LocalDateTime localDateTime或存在时区问题或一切都很好并且您只是误解了结果,则可能会得到一些提示。

09-08 03:35