2016-12-05 24 views
0

Jdk 1.8.0_82、Springboot 1.3.8およびJPAをスローします。Spring JPAが「不明なエンティティ」例外

既存のオブジェクト値から作成された新しい行を挿入します。

私はちょうど

List<LogSchemaFieldModel> newFields = Lists.newArrayList(); 
for(LogSchemaFieldModel f : fields){ 
newFields.add(new LogSchemaFieldModel(){{ 
         setFieldName(f.getFieldName()); 
         setFieldType(f.getFieldType()); 
         setFieldOpt(Field.Mode.NULLABLE.toString()); 
         setDescription(f.getDescription()); 
         setSampleValue(f.getSampleValue()); 
         setCommon(true); 
         setRequired(null); 
        }}); 
} 
repo.save(newFields); 

を呼ぶが、それは、この例外がスローされます。

org.springframework.dao.InvalidDataAccessApiUsageException: Unknown entity: com......service.LogDefineService$6; nested exception is java.lang.IllegalArgumentException: Unknown entity: com......service.LogDefineService$6 
    at org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:384) ~[spring-orm-4.2.8.RELEASE.jar:4.2.8.RELEASE] 
    at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:227) ~[spring-orm-4.2.8.RELEASE.jar:4.2.8.RELEASE] 
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:436) ~[spring-orm-4.2.8.RELEASE.jar:4.2.8.RELEASE] 
    at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:59) ~[spring-tx-4.2.8.RELEASE.jar:4.2.8.RELEASE] 
    at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:213) ~[spring-tx-4.2.8.RELEASE.jar:4.2.8.RELEASE] 
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:147) ~[spring-tx-4.2.8.RELEASE.jar:4.2.8.RELEASE] 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.2.8.RELEASE.jar:4.2.8.RELEASE] 
    at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:131) ~[spring-data-jpa-1.9.5.RELEASE.jar:na] 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.2.8.RELEASE.jar:4.2.8.RELEASE] 
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92) ~[spring-aop-4.2.8.RELEASE.jar:4.2.8.RELEASE] 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.2.8.RELEASE.jar:4.2.8.RELEASE] 
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208) ~[spring-aop-4.2.8.RELEASE.jar:4.2.8.RELEASE] 
    at com.sun.proxy.$Proxy119.save(Unknown Source) ~[na:na] 
    at com.my... 

答えて

2

最後に、解決策が見つかりました。

削除二重ブレースを初期化します。

List<LogSchemaFieldModel> newFields = Lists.newArrayList(); 
for(LogSchemaFieldModel f : fields){ 
LogSchemaFieldModel nf = new LogSchemaFieldModel(); 
       nf.setFieldName(f.getFieldName()); 
       nf.setFieldType(f.getFieldType()); 
       nf.setFieldOpt(Field.Mode.NULLABLE.toString()); 
       nf.setDescription(f.getDescription()); 
       nf.setSampleValue(f.getSampleValue()); 
       nf.setCommon(true); 
       nf.setRequired(null); 
newFields.add(nf); 
} 
repo.save(newFields); 

しかし、私はなぜそれが動作するのかわかりません。 それはjava8の二重ブレース初期化バグですか?

+1

同じ問題がありました。二重ブレースの初期化を削除すると、私のためにそれを解決しました。誰がなぜこれが問題なのか知っていますか? – trojanc

関連する問題