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
,并在两个hibernatexml
文件中按以下方式定义
<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))