我正在查询基于两列日期和时间的表来返回行:
tx_creation_date [date]
和tx_creation_time [time(7)]
使用以下查询语句:
public interface PurchaseRepository extends PagingAndSortingRepository<Purchase, BigDecimal> {
@Query(value = "select p from Purchase p where (p.txCreationDate >=
:startDate and p.txCreationTime >= :startTime) and (p.txCreationDate <= :endDate and p.txCreationTime <= :endTime)")
public List<Purchase> findAllTxByTimestampRange(@Param(startDate) LocalDate startDate,
@Param(startTime) LocalTime startTime, @Param(endDate) LocaleDate endDate,
@Param(endTime) LocalTime endTime);
other queries...
}
以下是Purchase类的片段:
@Entity
@Table(name = "po_log")
public class Purchase implements Serializable {
private static final long serialVersionUID = -1L;
@Id
@Column(name = "po_number")
private BigDecimal poNumber;
private String type;
@Column(name = "tx_creation_date")
@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentLocalDate")
private LocalDate txCreationDate;
@Column(name = "tx_creation_time")
@Type(type = "org.jadira.usertype.dateandtime.joda.PersitentLocalTime")
private LocalTime txCreationTime;
..
..
getters and setters
}
执行后,我收到以下错误消息:
数据类型datetime和time在大于或等于运算符
时不兼容
我尝试了一些没有成功的技巧:
sendTimeAsDateTime=false
cast (txCreationTime as time)
或convert
cast
将日期和时间连接为datetime
非常感谢任何帮助。
旁注:选择包含日期范围的行只会产生成功。因此问题确实存在于时间上。
我当前的设置:
答案 0 :(得分:0)
如果您使用jtds
驱动程序 - 尝试使用本机microsft JDBC driver - 它实现了JDBC 4,并且应该随着时间的推移正常工作。
或者,您可以将您的实体中的时间列映射为String
,并在查询中设置参数new SimpleDateFormat("HH:mm:ss.SSS")