Java datetime和time数据类型在大于或等于运算符中不兼容
我在数据库表的一列中有一个变量类型time。 如何将java中的这个值与这个字段进行比较我的意思是我可以使用date,gregoriancalendar吗? 我已经试过了,但我仍然有这个消息,请有人给我一个建议Java datetime和time数据类型在大于或等于运算符中不兼容,java,sql-server,hibernate,hql,Java,Sql Server,Hibernate,Hql,我在数据库表的一列中有一个变量类型time。 如何将java中的这个值与这个字段进行比较我的意思是我可以使用date,gregoriancalendar吗? 我已经试过了,但我仍然有这个消息,请有人给我一个建议 Date d2 = new Date(); // timestamp now Calendar cal = Calendar.getInstance(); // get calendar instance cal.setTime(d2
Date d2 = new Date(); // timestamp now
Calendar cal = Calendar.getInstance(); // get calendar instance
cal.setTime(d2); // set cal to date
cal.set(Calendar.HOUR_OF_DAY, 10); // set hour to midnight
cal.set(Calendar.MINUTE, 30); // set minute in hour
cal.set(Calendar.SECOND, 0); // set second in minute
cal.set(Calendar.MILLISECOND, 0); // set millis in second
Date d3 = cal.getTime();
@SuppressWarnings("unchecked")
List<Asistencia> list = (List<Asistencia>) sessionFactory
.getCurrentSession()
.createQuery(
"select new Asistencia( asis.idAsistencia,"
+ "asis.horaInicio, asis.horaFin) "
+ "from Asistencia asis "
+ "where :hour >= asis.horaInicio and :hour <= asis.horaFin")
.setParameter("hour", d3).list();
而台面是一样的:
ERROR: org.hibernate.engine.jdbc.spi.SqlExceptionHelper - The data types datetime and time are incompatible in the greater than or equal to operator.
datetime和time数据类型在大于或等于运算符中不兼容
下面是Asistencia类:
public class Asistencia implements java.io.Serializable {
private static final long serialVersionUID = 1L;
private long idAsistencia;
private Date horaInicio;
private Date horaFin;
private int idAula;
private int idCurso;
private int idPeriodo;
private Date fecha;
public Asistencia (){
}
public Asistencia (long idAsistencia, Date horaInicio, Date horaFin){
this.idAsistencia
this.horaInicio = horaInicio;
this.horaFin = horaFin;
}
}唯一的问题似乎是我使用的是SQL Server 2008,需要将sendTimeAsDateTime=false放入connections属性中 这里有一个类似的问题。
如果不设置sendTimeAsDateTime属性,您可以尝试使用字符串而不是日期。sendTimeAsDateTime属性不适用于3.0以上版本的SQL Server驱动程序(由于某些原因,我们中的一些人一直使用现有的驱动程序)。使用PreparedStatement对我有效,我打赌在这种情况下也会有效。将第一个代码块的最后一行更改为:
.setParameter( "hour", new SimpleDateFormat("HH:mm:ss.SSS").format(d3) ).list();
我在通过
spring-data-jpa
和eclipselink
通过类型为javax.time.LocalDate
的实体属性查询数据时遇到了相同的问题。连接设置sendTimeAsDateTime=false
没有帮助。通过将spring数据jpa
converterorg.springframework.data.jpa.convert.threeten.jsr310jpa转换器$LocalDateConverter
添加到persistence.xml
文件中,这一问题得到了解决。希望这有帮助。我也有同样的问题。我的sql数据类型是Time(7)
,每次我想通过JPQL查询对其进行比较时,就会出现错误。连接字符串sendTimeAsDateTime=false
不起作用。将org.springframework.data.jpa.convert.threeten.Jsr310JpaConverters$LocalDateConverter
添加到persistence.xml
中也不起作用
我要做的是,将数据Time(7)
从sql存储到String
,例如,这是我在sql上的表设计
StartTime time(7)
在java类中,我将该字段存储到String
变量中
@Entity
@Table(name = "tableSchedule")
public class TableSchedulue implements Serializable {
private static final long serialVersionUID = -9112498278775770919L;
....
@Column(name = "StartTime")
private String startTime;
.....
}
当我像这样使用JPQL查询时(在存储库中)
@Query(value=“选择一个”
+“从表时间表a”
+“其中a.startTime在调用传递空日期的JpaRepository API时,我使用SpringBoot(v2.2.2)和MSSQL服务器(jdbc7.4.1)遇到了此错误。这是存储库API的第一个版本
@Query(value = "SELECT t FROM MyEntity t WHERE "
+ " AND ( ?3 IS NULL OR ( ?3 IS NOT NULL AND t.fromDate<= ?3 ))"
+ " AND ( ?2 IS NULL OR ( ?2 IS NOT NULL AND t.toDate>= ?2 ))")
List<MyEntity> getMyEntity(LocalDate fromDate, LocalDate toDate);
我用演员阵容解决了这个问题:
@Query(value = "SELECT t FROM MyEntity t WHERE "
+ " AND ( ?3 IS NULL OR ( ?3 IS NOT NULL AND t.fromDate<= CAST( ?3 AS date ) ))"
+ " AND ( ?2 IS NULL OR ( ?2 IS NOT NULL AND t.toDate>= CAST( ?2 AS date ) ))")
List<MyEntity> getMyEntity(LocalDate fromDate, LocalDate toDate);
@Query(value=“从MyEntity t WHERE中选择t”
+“和(?3为空或(?3不为空且t.fromDate=CAST(?2为日期))”)
列出getMyEntity(LocalDate fromDate,LocalDate toDate);
ready,我在您的实体中使用@Temporal注释更新了post@oshingctry。不确定这是否可行,但尝试将您的参数设置为变量。
@Query(value = "SELECT t FROM MyEntity t WHERE "
+ " AND ( ?3 IS NULL OR ( ?3 IS NOT NULL AND t.fromDate<= ?3 ))"
+ " AND ( ?2 IS NULL OR ( ?2 IS NOT NULL AND t.toDate>= ?2 ))")
List<MyEntity> getMyEntity(LocalDate fromDate, LocalDate toDate);
The data types date and varbinary are incompatible in the less than or equal to operator
@Query(value = "SELECT t FROM MyEntity t WHERE "
+ " AND ( ?3 IS NULL OR ( ?3 IS NOT NULL AND t.fromDate<= CAST( ?3 AS date ) ))"
+ " AND ( ?2 IS NULL OR ( ?2 IS NOT NULL AND t.toDate>= CAST( ?2 AS date ) ))")
List<MyEntity> getMyEntity(LocalDate fromDate, LocalDate toDate);