Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.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 datetime和time数据类型在大于或等于运算符中不兼容_Java_Sql Server_Hibernate_Hql - Fatal编程技术网

Java datetime和time数据类型在大于或等于运算符中不兼容

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

我在数据库表的一列中有一个变量类型time。 如何将java中的这个值与这个字段进行比较我的意思是我可以使用date,gregoriancalendar吗? 我已经试过了,但我仍然有这个消息,请有人给我一个建议

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
converter
org.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);