Java Hibernate-错误:数据截断:日期时间值不正确

Java Hibernate-错误:数据截断:日期时间值不正确,java,mysql,sql,database,hibernate,Java,Mysql,Sql,Database,Hibernate,我用这段代码将数据从一个表插入到另一个表 Session session = HibernateUtil.getSessionFactory().openSession(); session.createSQLQuery( "INSERT INTO news_statistics (crime_type, crime_district, crime_date, crime_year, crime_yearquarter, crime_count) " +

我用这段代码将数据从一个表插入到另一个表

Session session = HibernateUtil.getSessionFactory().openSession();
session.createSQLQuery(
                "INSERT INTO news_statistics (crime_type, crime_district, crime_date, crime_year, crime_yearquarter, crime_count) " +
                        "(SELECT crime_type,(SELECT district FROM location_district_mapper ldm WHERE ceg.location = ldm.location) , crime_date, YEAR (crime_date), CONCAT(YEAR (crime_date), ' - ', QUARTER(crime_date)), count(id) " +
                        "FROM crime_entity_group ceg " +
                        "WHERE crime_date >= '2012-01-01' AND crime_date <= '2014-12-31' " +
                        "GROUP BY crime_type, district, crime_date " +
                        "ORDER BY YEAR ('crime_date'))").executeUpdate();
但是,当我直接使用phpmyadmin运行查询时,查询运行良好,没有显示任何错误

当我只运行查询的
select
部分并使用
list()
列出结果时,它不会给出任何错误。因此,我可以假设问题出在查询的
insert
部分。当我从查询中删除
crime\u date
时,查询运行时不会显示任何错误

两个表中的
crime\u date
类型均为
date
,并在两个hibernate
xml
文件中按以下方式定义

<property name="crimeDate" type="date">
        <column name="crime_date" not-null="false"/>
</property>
有人知道解决办法吗

提前谢谢你…

这句话

CONCAT(YEAR (crime_date), ' - ', QUARTER(crime_date))
将被计算为类似“2015-1”的值,并且这对于类型为DATE或DATETIME的列无效。MySQL的有效值类似于“yyyy-mm-dd”,并删除“-”(破折号)符号周围的空格。

此表达式

CONCAT(YEAR (crime_date), ' - ', QUARTER(crime_date))

将被计算为类似“2015-1”的值,并且这对于类型为DATE或DATETIME的列无效。MySQL的有效值类似于'yyyy-mm-dd',并且还删除了“-”(破折号)符号周围的空格。

您需要确保
新闻统计信息。犯罪日期
犯罪实体组。犯罪日期
具有相同的SQL类型(例如日期、时间、时间戳、日期时间)

如果一个是DATE,另一个是DATETIME,则由于类型不匹配约束冲突,语句将失败

从您的异常消息:

日期时间值不正确:“犯罪日期”


似乎
news\u statistics.crime\u date
是一个DATETIME列,而
crime\u entity\u组。crime\u date
可能是一个日期。

您需要确保
news\u statistics.crime\u date
crime\u entity\u entity\u组。crime\u date
具有相同的SQL类型(例如日期、时间、时间、时间戳、日期时间)

如果一个是DATE,另一个是DATETIME,则由于类型不匹配约束冲突,语句将失败

从您的异常消息:

日期时间值不正确:“犯罪日期”



似乎是
新闻统计。犯罪日期
是一个日期时间列,而
犯罪实体组。犯罪日期
可能是一个日期。

问题在于
按年份排序(“犯罪日期”)
。我的错误<代码>“犯罪日期”
是一个字符串,不是日期。这就是抛出错误的原因。应将其更改为“按年份(犯罪日期)排序”

问题在于
按年份(“犯罪日期”)排序。
。我的错误<代码>“犯罪日期”
是一个字符串,不是日期。这就是抛出错误的原因。应将其更改为“按年份(犯罪日期)排序”

尝试移除第一个(外部)
周围的
(..)
,然后选择
。它们是无用的。我建议您一点一点地简化SQL,直到找到问题所在。首先,你能不能只选择而不插入来重现这个问题?@JonSkeet。问题是插入
crime\u date
。你能不能显示
news\u statistics
crime\u entity\u group
@Jens我添加了
ddl
s。试着删除第一个(外部)
select
周围的
(..)
。它们是无用的。我建议您一点一点地简化SQL,直到找到问题所在。首先,您能否仅通过选择而不插入来复制此内容?@JonSkeet。问题在于插入
crime\u date
。您能否显示
news\u statistics
crime\u entity\u group
@Jens我添加了
ddl
s的ddl。谢谢。但是与此相关的列定义为
varchar
。问题在于
犯罪日期
。谢谢。但是与此相关的列定义为
varchar
。问题在于
crime\u date
。但为什么它会说“日期时间值不正确”?真奇怪,我很抱歉。。。问题在于,
按年份(“犯罪日期”)排序。
。应将其更改为“按年份(犯罪日期)排序”。我的错误现在有道理了。一年不需要一个瓦查尔。好问题。但为什么它会说“不正确的日期时间值”?真奇怪,我很抱歉。。。问题在于,
按年份(“犯罪日期”)排序。
。应将其更改为“按年份(犯罪日期)排序”。我的错误现在有道理了。一年不需要一个瓦查尔。好问题。
CONCAT(YEAR (crime_date), ' - ', QUARTER(crime_date))