使用Hibernate本机查询插入不适用于java.util.Date

Ikt*_*der 5 mysql sql spring hibernate jpa

我正在使用Hibernate JPA和Spring与Mysql数据库,我想使用这样的SQL语句插入:

Date saveDate = new Date();
java.sql.Timestamp timeStampDate = new Timestamp(saveDate.getTime());
Query persistableQuery = entityManager.createNativeQuery("INSERT INTO TASK_ASSESSMENT (ACTIVE_FLAG, ASSESSMENT_DATE, DESCRIPTION, "
        + "TITLE, NEEDS_LEVEL_ID, PATIENT_ID, USER_ID) VALUES ("
        + true +", " + timeStampDate + ", " + description + ", " + title + ", "
        + needsLevelId + ", " + patientId + ", " + userId + " )");
persistableQuery.executeUpdate();
Run Code Online (Sandbox Code Playgroud)

但运行后我收到以下错误:

WARN : org.hibernate.util.JDBCExceptionReporter - SQL Error: -11, SQLState: 37000
ERROR: org.hibernate.util.JDBCExceptionReporter - Unexpected token: 15 in statement
    [INSERT INTO TASK_ASSESSMENT (ACTIVE_FLAG, ASSESSMENT_DATE, DESCRIPTION, TITLE,
    NEEDS_LEVEL_ID, PATIENT_ID, USER_ID)
    VALUES (true, 2011-03-01 15?, any description, , 193, 1, 3 )]
Run Code Online (Sandbox Code Playgroud)

有人可以帮我吗?

PS.我知道以非本机方式使用hibernate,但我需要使用本机方式.我也是插入......来自......,但我认为它不会有所帮助.

最后我认为问题主要与日期有关.你们如何datetime使用Java 传递MySQL 类型?

更新:

以下工作正常,我猜这是一个java日期到mysql datetime转换问题.

("INSERT INTO TASK_ASSESSMENT "
     + "(ACTIVE_FLAG, ASSESSMENT_DATE, DESCRIPTION, TITLE, "
     + "NEEDS_LEVEL_ID, PATIENT_ID, USER_ID) "
     + "VALUES (true, 1999-12-22, '" + description + "', '" 
     + title + "', " + needsLevelId+", " + patientId 
     + ", " + userId + ")");
Run Code Online (Sandbox Code Playgroud)

谁能帮助我如何转换java.util.Date为MySQL datetime

axt*_*avt 13

不要使用串联将数据插入查询,而是使用参数.它解决了错误表示值以及许多其他问题的问题:

entityManager.createNativeQuery(
    "INSERT INTO TASK_ASSESSMENT (ACTIVE_FLAG, ASSESSMENT_DATE, DESCRIPTION, "
    + "TITLE, NEEDS_LEVEL_ID, PATIENT_ID, USER_ID) VALUES (?, ?, ?, ?, ?, ?, ?)")
    .setParameter(1, true)
    .setParameter(2, saveDate, TemporalType.TIMESTAMP) // Since you want it to be a TIMESTAMP
    .setParameter(3, description)
    .setParameter(4, title)
    .setParameter(5, needsLevelId)
    .setParameter(6, patientId)
    .setParameter(7, userId) 
    .executeUpdate();
Run Code Online (Sandbox Code Playgroud)