Проблема с усечением даты при попытке обновить mysql 5.5 до 5.7 вместе с hibernate3 - PullRequest
1 голос
/ 16 апреля 2020

Я работаю на устаревшей системе, использующей hibernate 3 andy mysql 5.5. Работает нормально. Я просто хочу обновить mysql версию с 5.5 до 5.7, но столбец даты вызывает проблемы. Пожалуйста, помогите мне.

Это мой файл hbm

**<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.test.tst.log.GactivityDaylog" table="g_activity_daylog">
        <id name="dlInd" type="integer">
            <column name="dl_ind" />
            <generator class="native" />
        </id>

        <property name="dlStrDt" type="timestamp">
            <column name="dl_str_dt" length="19" not-null="true" />
        </property>
        <property name="dlEndDt" type="timestamp">
            <column name="dl_end_dt" length="19" />
        </property>

        <property name="regKey" type="string">
            <column name="reg_key" length="145" />
        </property>
    </class>
</hibernate-mapping>**

И это мой java class

** package com.test.tst.log; import java .util.Date;

public class GactivityDaylog implements java.io.Serializable {


    // Fields    

     private Integer dlInd;

     private Date dlStrDt;
     private Date dlEndDt;

     private String regKey;

    // Constructors

    public String getRegKey() {
        return regKey;
    }

    public void setRegKey(String regKey) {
        this.regKey = regKey;
    }

    /** default constructor */
    public GactivityDaylog () {
    }

    /** constructor with id */
    public GactivityDaylog (Integer dlInd) {
        this.dlInd = dlInd;
    }




    // Property accessors

    public Integer getDlInd() {
        return this.dlInd;
    }

    public void setDlInd(Integer dlInd) {
        this.dlInd = dlInd;
    }



    public Date getDlStrDt() {
        return this.dlStrDt;
    }

    public void setDlStrDt(Date dlStrDt) {
        this.dlStrDt = dlStrDt;
    }

    public Date getDlEndDt() {
        return this.dlEndDt;
    }

    public void setDlEndDt(Date dlEndDt) {
        this.dlEndDt = dlEndDt;
    }**

Это поле вызывает проблему: -

org.springframework.dao.DataIntegrityViolationException: Операция гибернации: не удалось вставить: [ com.novoally.ns.log.GDaylog]; SQL [вставить в g_daylog (usr_ind, dl_str_dt, dl_end_dt, del_ind, reg_key) значения (?,?,?,?,?)]; Усечение данных: неверное значение даты и времени: '' для столбца 'dl_str_dt' в строке 1; вложенное исключение: com. mysql .jdb c .MysqlDataTruncation: усечение данных: неправильное значение даты и времени: '' для столбца 'dl_str_dt' в строке 1, вызванное: com. mysql .jdb c .MysqlDataTruncation: данные усечение: Неверное значение даты и времени: '' для столбца 'dl_str_dt' в строке 1 в com. mysql .jdb c .MysqlIO.checkErrorPacket (MysqlIO. java: 2973) в com. mysql .jdb c .MysqlIO.sendCommand (MysqlIO. java: 1600) в com. mysql .jdb c .ServerPreparedStatement.serverExecute (ServerPreparedStatement. java: 1125) в com. mysql .jdb c. ServerPreparedStatement.executeInternal (ServerPreparedStatement. java: 677) в com. mysql .jdb c .PreparedStatement.executeUpdate (PreparedStatement. java: 1357) в com. mysql .jdb * 1044State. executeUpdate (PreparedStatement. java: 1274) по адресу com. mysql .jdb c .PreparedStatement.executeUpdate (PreparedStatement. java: 1259) по адресу com.mchange.v2.c3p0.impl.NewProxyPreparedStatetate () . java: 105) на сайте org.hibernate.persister.e ntity.AbstractEntityPersister.insert (AbstractEntityPersister. java: 1968) в org.hibernate.persister.entity.AbstractEntityPersister.insert (AbstractEntityPersister. java: 2405) в org.hibernate.action.EntityIdentityInsertAsertInsertAsert (InsertAsert). *: 37) в org.hibernate.engine.ActionQueue.execute (ActionQueue. java: 248) в org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate (AbstractSaveEventListener. java: 269) в org.hiber. с . java: 186) в org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId (DefaultSaveEventListener. java: 33) в org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entitys t (DefaultSaveOrUpdateEventListener. java: 175) по адресу org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate (DefaultSaveEventListener. java: 27) по адресу org.hibernate.event.def.DefaultSaveeateeventLventOventPortOventPlayerUventRuserventUventRuserventUventRuserventUventPlayerUventRuserventUvent.Up.exe 70) в org.hibernate.impl.SessionImpl.fireSave (SessionImpl. java: 530) в org.hibernate.impl.SessionImpl.save (SessionImpl. java: 518) в org.hibernate.impl.SessionImpl.save (SessionImpl. java: 514) в org.springframework.orm.hibernate3.HibernateTemplate $ 12.doInHibernate (HibernateTemplate. java: 617) в org.springframework.orm.hibernate3.HibernateTemplate.execute (HibernateTemplate. 366) в org.springframework.orm.hibernate3.HibernateTemplate.save (HibernateTemplate. java: 614)

Моя таблица:

*CREATE TABLE `g_activiy_daylog` (
  `dl_ind` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `usr_ind` int(10) unsigned NOT NULL DEFAULT ''0'',
  `dl_str_dt` datetime NOT NULL DEFAULT ''0000-00-00 00:00:00'',
  `dl_end_dt` datetime DEFAULT NULL,
  `reg_key` varchar(145) DEFAULT NULL,
  PRIMARY KEY (`dl_ind`),
)*

1 Ответ

0 голосов
/ 16 апреля 2020

В MySQL 5.7 вы должны установить это, чтобы принимать недопустимую дату

SET SQL_MODE='ALLOW_INVALID_DATES';

Но нехорошо хранить недопустимую дату. Используйте допустимое значение по умолчанию для dl_str_dt при создании таблицы и обновите также существующее недопустимое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...