2017-12-19 23 views
0

小さな問題があります。小さなSpringブートアプリケーションを作成し、Hibernateを使用しようとしています。これもうまくいきますが、残念ながら<mvn clean package>をビルドするときに上記のエラーメッセージが表示されます。エラーは、テストが開始されるまで発生しません。実際には、論理的でもあり、HibernateまたはJUnitはテスト日付として0000-00-00 00:00:00を使用しようとします。 MySQLはそれを許可していません。どうすればテストに「Now()」と言うことができますか?com.mysql.jdbc.MysqlDataTruncation:データの切り捨て:日付時刻の値が正しくありません:行1の 'lastchange'の '0000-00-00 00:00:00'

TestClassを:

package com.webservice.spring; 

import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.springframework.boot.test.context.SpringBootTest; 
import org.springframework.test.context.junit4.SpringRunner; 

@RunWith(SpringRunner.class) 
@SpringBootTest 
public class ApiApplicationTests 
{ 

    @Test 
    public void contextLoads() 
    { 

    } 

} 

これはモデルで定義です:

@NotNull 
@Generated(value=GenerationTime.ALWAYS) 
@Column(name = "lastchange", columnDefinition = "DATETIME", nullable = false) 
private LocalDate lastchanged; 

とのStackTraceの抜粋:

Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '0000-00-00 00:00:00' for column 'lastchange' at row 1 
     at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3971) 
     at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909) 
     at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527) 
     at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680) 
     at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2483) 
     at com.mysql.jdbc.StatementImpl.executeUpdateInternal(StatementImpl.java:1552) 
     at com.mysql.jdbc.StatementImpl.executeLargeUpdate(StatementImpl.java:2607) 
     at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1480) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:498) 
     at org.apache.tomcat.jdbc.pool.StatementFacade$StatementProxy.invoke(StatementFacade.java:114) 
     at com.sun.proxy.$Proxy96.executeUpdate(Unknown Source) 
     at org.hibernate.tool.schema.internal.TargetDatabaseImpl.accept(TargetDatabaseImpl.java:56) 
     at org.hibernate.tool.schema.internal.SchemaMigratorImpl.applySqlString(SchemaMigratorImpl.java:431) 
     at org.hibernate.tool.schema.internal.SchemaMigratorImpl.applySqlStrings(SchemaMigratorImpl.java:449) 
     at org.hibernate.tool.schema.internal.SchemaMigratorImpl.migrateTable(SchemaMigratorImpl.java:253) 
     at org.hibernate.tool.schema.internal.SchemaMigratorImpl.doMigrationToTargets(SchemaMigratorImpl.java:170) 
     at org.hibernate.tool.schema.internal.SchemaMigratorImpl.doMigration(SchemaMigratorImpl.java:60) 
     at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:134) 
     at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:101) 
     at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:472) 
     at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:444) 
     at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:879) 
     at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:60) 
     at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:360) 
     at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:382) 
     at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:371) 
     at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:336) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) 
     at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
     at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1080) 
     at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:857) 
     at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543) 
     at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693) 
     at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360) 
     at org.springframework.boot.SpringApplication.run(SpringApplication.java:303) 
     at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:120) 
     at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) 
     at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) 

私は防ぐために何ができます失敗からテストしますか?

+0

' LocalDate.now(ZoneId.of( "オーストラリア/ Broken_Hill"))にデフォルト値を設定することができますか?あなたはあなたの好きなタイムゾーンを代用することができます。テストクラスの –

+0

? – Husker

答えて

0

あなたは、例えば、ALTER TABLE文を使用して 列のデフォルト値を変更し、次の

  • のいずれかを行うことができます

のALTER TABLEのユーザー作成日時のNULL DEFAULT '1970-01-01'

  • 変更NULL値を許可し、ゼロを変更するには、既存の 行を更新するには、日付列を変更

    中:値

+0

このフィールドは、MySQL自体で埋められます。 デフォルトでは:CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP – Husker

0

回答をnullにさかのぼりモデルクラス:

@Column(name = "lastchange", columnDefinition = "DATETIME default '1900-01-01 00:00:00'", nullable = false) 
private LocalDate lastchanged; 

あなたは `列注釈

関連する問題