2017-06-16 1 views
1

Ich versuche (als Java-Anfänger) Frühling jpa Auditing für Stunden/Tage jetzt einrichten ... und ich fange an zu bekommen sehr frustrierend, da ich das Problem nicht finden kann. Ich würde wirklich etwas Hilfe schätzen.Frühjahr jpa Prüfung lastmodifiedby und lastmodifiedDate sind in Ordnung, aber createdBy und createdDate Annotation sind immer null

@LastModifiedBy und @LastModifiedDate Annotationen funktionieren, aber @CreatedBy und @CreatedDate sind immer NULL. Hier

ist die SQL-Abfrage Debugging-Ausgabe: 2017.06.16 16.40.39 [main] DEBUG ntdllSLF4JQueryLoggingListener ntdsSLF4JLogUtils WriteLog - Name :, Zeit: 0, Erfolg: False, Typ: Vorbereitet, Batch : False, QuerySize: 1, BatchSize: 0, Abfrage: ["APPLY_CRE =? Aktualisieren, APT_DTE_CRE = ?, APT_AGE_UPD = ?, APT_DTE_UPD = ?, APT_ADDRESS = ?, APT_BIRTHDATE = ?, APT_CITY = ?, APT_FIRSTNAME =? , APT_INTERNAL_REF = ?, APT_LASTNAME = ?, APT_MATRICULE = ?, APT_NATIONALITY = ?, APT_COUNTRY = ?, APT_SEX = ?, APT_STATUS = ?, APT_ZIP_CODE = wo PK_APT_NUM_ID = "], Params:? [(NULL (INTEGER) NULL (TIMESTAMP), 1,2017-06-16 16: 40: 39.618,1, Rue des Totos, 1985-12-30 00: 00: 00.0, NULL (VARCHAR), Toto, NULL (INTEGER), Xyz, 122222222126, 127.127, M, NULL (VARCHAR), NULL (INTEGER), 1)]

Der wichtige Teil die ersten 2 Parameter ist, der die @createdBy und @CreatedDate sind: (NULL (integer), NULL (Zeitstempel), 1,2017-06-16 16: 40: 39,618

der @ModifiedBy hat Wert: 1 und die @ModifiedDate hat den Wert: 2017.06.16 16: 40: 39,618 beide korrekt sind.

public class AuditorAwareImpl implements AuditorAware<Agent>{ 
protected static final Logger LOGGER_DEBUG = LoggerFactory.getLogger("debug"); 
@Override 
public Agent getCurrentAuditor() { 
    LOGGER_DEBUG.debug("Loading auditor"); 
    Agent agent = new Agent(); 
    agent.setId(1); 
    return agent; 
} 

@MappedSuperclass 
@EntityListeners(value = {AuditingEntityListener.class}) 
public class AbstractAuditedEntity extends AbstractEntity { 

    private static final long serialVersionUID = 7151010030414095019L; 

    @CreatedBy 
    @OneToOne @JoinColumn(name = "APT_AGE_CRE", nullable = false) 
    protected Agent createdBy; 

    @CreatedDate 
    @Type(type = "org.jadira.usertype.dateandtime.threeten.PersistentZonedDateTime") 
    @Column(name = "APT_DTE_CRE", nullable = false) //@DateTimeFormat(pattern = "dd/MM/yyyy HH:mm") 
    protected ZonedDateTime creationTime; 

    @LastModifiedBy 
    @OneToOne @JoinColumn(name = "APT_AGE_UPD", nullable = false) 
    protected Agent updatedBy; 

    @LastModifiedDate 
    @Type(type = "org.jadira.usertype.dateandtime.threeten.PersistentZonedDateTime") 
    @Column(name = "APT_DTE_UPD", nullable = false) //@DateTimeFormat(pattern = "dd/MM/yyyy HH:mm") 
    protected ZonedDateTime updatingTime; 

} 

public class Applicant extends AbstractAuditedEntity { 

private static final long serialVersionUID = -5651129526769191543L; 

@Id 
@Column(name = "PK_APT_NUM_ID") 
@SequenceGenerator(name = "ApplicantSequence", sequenceName = "SEQ_APPLICANT", allocationSize = 1) 
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "ApplicantSequence") 
private Integer id; 

@Column(name = "APT_INTERNAL_REF") 
private Integer internalRef; 

@NaturalId(mutable = true) 
@Column(name = "APT_MATRICULE", unique = true, length = 13) 
@NotNull 
@MatriculeValidator 
private String matricule; 

@Column(name = "APT_SEX", length = 1) 
@Enumerated(EnumType.STRING) 
@NotNull 
private SexCode sexCode; 

@Column(name = "APT_LASTNAME", length = 100) 
@NotNull 
private String lastName; 

@Column(name = "APT_FIRSTNAME", length = 100) 
@NotNull 
private String firstName; 

@Column(name = "APT_STATUS", length = 1) 
@Enumerated(EnumType.STRING) 
private ApplicantStatusCode statusCode; 

@OneToOne(fetch = FetchType.LAZY) 
@JoinColumn(name = "APT_COUNTRY", foreignKey = @ForeignKey(name = "FK_APT_COUNTRY")) 
private Country residencyCountry; 

@Column(name = "APT_BIRTHDATE") 
@NotNull 
@DateTimeFormat(pattern = "dd/MM/yyyy") 
private ZonedDateTime birthdate; 

@OneToOne(fetch = FetchType.LAZY) 
@JoinColumn(name = "APT_NATIONALITY", foreignKey = @ForeignKey(name = "FK_APT_NATIONALITY")) 
private Country nationality; 

@Column(name = "APT_ZIP_CODE") 
private Integer zipCode; 

@Column(name = "APT_ADDRESS", length = 250) 
private String address; 

@Column(name = "APT_CITY", length = 60) 
private String city; 

Jetzt orm.xml und applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?> 
<entity-mappings 
     xmlns="http://java.sun.com/xml/ns/persistence/orm" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_2_0.xsd" version="2.0"> 
    <persistence-unit-metadata> 
     <persistence-unit-defaults> 
      <entity-listeners> 
       <entity-listener class="org.springframework.data.jpa.domain.support.AuditingEntityListener" /> 
      </entity-listeners> 
     </persistence-unit-defaults> 
    </persistence-unit-metadata> 
</entity-mappings> 

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:tx="http://www.springframework.org/schema/tx" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:jpa="http://www.springframework.org/schema/data/jpa" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd 
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> 

    <context:annotation-config/> 

    <jpa:repositories base-package="aficom.model.repository" entity-manager-factory-ref="entityManagerFactory" 
         transaction-manager-ref="transactionManager"/> 

    <bean id="auditorBean" class="aficom.model.audit.AuditorAwareImpl"/> 
    <jpa:auditing auditor-aware-ref="auditorBean"/> 

    <bean id="dataSource" class="org.apache.tomcat.dbcp.dbcp2.BasicDataSource"> 
     <property name="url" value="jdbc:oracle:thin:@localhost:1521:XE"/> 
     <property name="driverClassName" value="oracle.jdbc.OracleDriver"/> 
     <property name="username" value="aficom"/> 
     <property name="password" value="1234"/> 
    </bean> 

    <!-- sql proxy --> 
    <bean id="dataSourceProxy" class="net.ttddyy.dsproxy.support.ProxyDataSource"> 
     <property name="dataSource" ref="dataSource"/> 
     <property name="listener" ref="listeners"/> 
    </bean> 
    <bean id="listeners" class="net.ttddyy.dsproxy.listener.ChainListener"> 
     <property name="listeners"> 
      <list> 
       <bean class="net.ttddyy.dsproxy.listener.logging.SLF4JQueryLoggingListener"/> 
       <bean class="net.ttddyy.dsproxy.listener.DataSourceQueryCountListener"/> 
      </list> 
     </property> 
    </bean> 
    <!-- end sql proxy --> 

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
     <property name="persistenceUnitName" value="aficom"/> 
     <property name="packagesToScan" value="aficom.model"/> 
     <!-- use sql proxy as datasource --> 
     <property name="dataSource" ref="dataSourceProxy"/> 
     <property name="jpaVendorAdapter"> 
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
       <property name="showSql" value="true"/> 
       <property name="database" value="ORACLE"/> 
       <property name="databasePlatform" value="org.hibernate.dialect.Oracle10gDialect"/> 
      </bean> 
     </property> 
     <property name="jpaProperties"> 
      <props> 
       <!-- required jadira config for spring jpa auditing --> 
       <prop key="jadira.usertype.autoRegisterUserTypes">true</prop> 
       <prop key="jadira.usertype.javaZone">UTC</prop> 
       <prop key="jadira.usertype.databaseZone">UTC</prop> 
      </props> 
     </property> 
    </bean> 

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
     <property name="entityManagerFactory" ref="entityManagerFactory"/> 
    </bean> 

    <tx:annotation-driven transaction-manager="transactionManager"/> 
</beans> 

Der Test Ich versuche zu laufen:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration({ "classpath:applicationContext.xml"}) 
@Transactional 
public class TestRepo { 

    protected static final Logger LOGGER_MODEL = LoggerFactory.getLogger("model"); 

    @PersistenceContext protected EntityManager entityManager; 

    @Test 
    @Rollback(false) 
    @Transactional 
    public void saveApplicant(){ 

     Applicant a = new Applicant(); 
     a.setId(1); 
     a.setFirstName("Toto"); 
     a.setLastName("Xyz"); 
     a.setAddress("1, rue des totos"); 
     a.setMatricule("122222222126"); 
     a.setSexCode(SexCode.M); 
     DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy"); 
     LocalDateTime localDate = LocalDate.parse("30/12/1985",formatter).atStartOfDay(); 
     ZonedDateTime zone = ZonedDateTime.of(localDate, ZoneId.of("Europe/Luxembourg")); 
     a.setBirthdate(zone); 
     a.setResidencyCountry(this.entityManager.find(Country.class,127)); 
     a.setNationality(this.entityManager.find(Country.class,127)); 
     LOGGER_MODEL.debug(a.toString()); 

     this.repo.save(a); 
    } 

Einige der Protokollausgabe:

2017-06-16 16:40:38 [main] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean o.s.o.j.AbstractEntityManagerFactoryBean buildNativeEntityManagerFactory - Initialized JPA EntityManagerFactory for persistence unit 'aficom' 
2017-06-16 16:40:39 [main] INFO o.s.t.c.t.TransactionContext o.s.t.c.t.TransactionContext startTransaction - Began transaction (1) for test context [[email protected] testClass = TestRepo, testInstance = [email protected], testMethod = [email protected], testException = [null], mergedContextConfiguration = [[email protected] testClass = TestRepo, locations = '{classpath:TEST-applicationContextDao.xml}', classes = '{}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{}', contextCustomizers = set[[empty]], contextLoader = 'org.springframework.test.context.support.DelegatingSmartContextLoader', parent = [null]]]; transaction manager [[email protected]]; rollback [false] 
Hibernate: select country0_.PK_COU_NUM_ID as PK_COU_NUM_ID1_2_0_, country0_.COU_IBAN_PATTERN as COU_IBAN_PATTERN2_2_0_, country0_.COU_ISO_2 as COU_ISO_3_2_0_, country0_.COU_ISO_3 as COU_ISO_4_2_0_, country0_.COU_LANG as COU_LANG5_2_0_, country0_.COU_NAME as COU_NAME6_2_0_, country0_.COU_NATIONALITY as COU_NATIONALITY7_2_0_, country0_.COU_ZIP_CODE as COU_ZIP_CODE8_2_0_ from COUNTRY country0_ where country0_.PK_COU_NUM_ID=? 
2017-06-16 16:40:39 [main] DEBUG n.t.d.l.l.SLF4JQueryLoggingListener n.t.d.s.SLF4JLogUtils writeLog - Name:, Time:2, Success:True, Type:Prepared, Batch:False, QuerySize:1, BatchSize:0, Query:["select country0_.PK_COU_NUM_ID as PK_COU_NUM_ID1_2_0_, country0_.COU_IBAN_PATTERN as COU_IBAN_PATTERN2_2_0_, country0_.COU_ISO_2 as COU_ISO_3_2_0_, country0_.COU_ISO_3 as COU_ISO_4_2_0_, country0_.COU_LANG as COU_LANG5_2_0_, country0_.COU_NAME as COU_NAME6_2_0_, country0_.COU_NATIONALITY as COU_NATIONALITY7_2_0_, country0_.COU_ZIP_CODE as COU_ZIP_CODE8_2_0_ from COUNTRY country0_ where country0_.PK_COU_NUM_ID=?"], Params:[(127)] 
Hibernate: select applicant0_.PK_APT_NUM_ID as PK_APT_NUM_ID1_1_0_, applicant0_.APT_AGE_CRE as APT_AGE_CRE14_1_0_, applicant0_.APT_DTE_CRE as APT_DTE_CRE2_1_0_, applicant0_.APT_AGE_UPD as APT_AGE_UPD15_1_0_, applicant0_.APT_DTE_UPD as APT_DTE_UPD3_1_0_, applicant0_.APT_ADDRESS as APT_ADDRESS4_1_0_, applicant0_.APT_BIRTHDATE as APT_BIRTHDATE5_1_0_, applicant0_.APT_CITY as APT_CITY6_1_0_, applicant0_.APT_FIRSTNAME as APT_FIRSTNAME7_1_0_, applicant0_.APT_INTERNAL_REF as APT_INTERNAL_REF8_1_0_, applicant0_.APT_LASTNAME as APT_LASTNAME9_1_0_, applicant0_.APT_MATRICULE as APT_MATRICULE10_1_0_, applicant0_.APT_NATIONALITY as APT_NATIONALITY16_1_0_, applicant0_.APT_COUNTRY as APT_COUNTRY17_1_0_, applicant0_.APT_SEX as APT_SEX11_1_0_, applicant0_.APT_STATUS as APT_STATUS12_1_0_, applicant0_.APT_ZIP_CODE as APT_ZIP_CODE13_1_0_ from APPLICANT applicant0_ where applicant0_.PK_APT_NUM_ID=? 
2017-06-16 16:40:39 [main] DEBUG n.t.d.l.l.SLF4JQueryLoggingListener n.t.d.s.SLF4JLogUtils writeLog - Name:, Time:3, Success:True, Type:Prepared, Batch:False, QuerySize:1, BatchSize:0, Query:["select applicant0_.PK_APT_NUM_ID as PK_APT_NUM_ID1_1_0_, applicant0_.APT_AGE_CRE as APT_AGE_CRE14_1_0_, applicant0_.APT_DTE_CRE as APT_DTE_CRE2_1_0_, applicant0_.APT_AGE_UPD as APT_AGE_UPD15_1_0_, applicant0_.APT_DTE_UPD as APT_DTE_UPD3_1_0_, applicant0_.APT_ADDRESS as APT_ADDRESS4_1_0_, applicant0_.APT_BIRTHDATE as APT_BIRTHDATE5_1_0_, applicant0_.APT_CITY as APT_CITY6_1_0_, applicant0_.APT_FIRSTNAME as APT_FIRSTNAME7_1_0_, applicant0_.APT_INTERNAL_REF as APT_INTERNAL_REF8_1_0_, applicant0_.APT_LASTNAME as APT_LASTNAME9_1_0_, applicant0_.APT_MATRICULE as APT_MATRICULE10_1_0_, applicant0_.APT_NATIONALITY as APT_NATIONALITY16_1_0_, applicant0_.APT_COUNTRY as APT_COUNTRY17_1_0_, applicant0_.APT_SEX as APT_SEX11_1_0_, applicant0_.APT_STATUS as APT_STATUS12_1_0_, applicant0_.APT_ZIP_CODE as APT_ZIP_CODE13_1_0_ from APPLICANT applicant0_ where applicant0_.PK_APT_NUM_ID=?"], Params:[(1)] 
Hibernate: select agent0_.PK_AGE_NUM_ID as PK_AGE_NUM_ID1_0_0_, agent0_.AGE_ACTIVE as AGE_ACTIVE2_0_0_, agent0_.AGE_EMAIL as AGE_EMAIL3_0_0_, agent0_.AGE_FIRSTNAME as AGE_FIRSTNAME4_0_0_, agent0_.AGE_IAM as AGE_IAM5_0_0_, agent0_.AGE_INFOS as AGE_INFOS6_0_0_, agent0_.AGE_LASTNAME as AGE_LASTNAME7_0_0_, agent0_.AGE_MATRICULE as AGE_MATRICULE8_0_0_, agent0_.AGE_PHONE as AGE_PHONE9_0_0_, agent0_.AGE_PROFILE as AGE_PROFILE10_0_0_, agent0_.AGE_TITLE as AGE_TITLE11_0_0_ from AGENT agent0_ where agent0_.PK_AGE_NUM_ID=? 
2017-06-16 16:40:39 [main] DEBUG n.t.d.l.l.SLF4JQueryLoggingListener n.t.d.s.SLF4JLogUtils writeLog - Name:, Time:1, Success:True, Type:Prepared, Batch:False, QuerySize:1, BatchSize:0, Query:["select agent0_.PK_AGE_NUM_ID as PK_AGE_NUM_ID1_0_0_, agent0_.AGE_ACTIVE as AGE_ACTIVE2_0_0_, agent0_.AGE_EMAIL as AGE_EMAIL3_0_0_, agent0_.AGE_FIRSTNAME as AGE_FIRSTNAME4_0_0_, agent0_.AGE_IAM as AGE_IAM5_0_0_, agent0_.AGE_INFOS as AGE_INFOS6_0_0_, agent0_.AGE_LASTNAME as AGE_LASTNAME7_0_0_, agent0_.AGE_MATRICULE as AGE_MATRICULE8_0_0_, agent0_.AGE_PHONE as AGE_PHONE9_0_0_, agent0_.AGE_PROFILE as AGE_PROFILE10_0_0_, agent0_.AGE_TITLE as AGE_TITLE11_0_0_ from AGENT agent0_ where agent0_.PK_AGE_NUM_ID=?"], Params:[(1)] 
2017-06-16 16:40:39 [main] DEBUG debug l.e.m.a.m.a.AuditorAwareImpl getCurrentAuditor - Loading auditor 
2017-06-16 16:40:39 [main] DEBUG debug l.e.m.a.m.a.AuditorAwareImpl getCurrentAuditor - Loading auditor 
Hibernate: update APPLICANT set APT_AGE_CRE=?, APT_DTE_CRE=?, APT_AGE_UPD=?, APT_DTE_UPD=?, APT_ADDRESS=?, APT_BIRTHDATE=?, APT_CITY=?, APT_FIRSTNAME=?, APT_INTERNAL_REF=?, APT_LASTNAME=?, APT_MATRICULE=?, APT_NATIONALITY=?, APT_COUNTRY=?, APT_SEX=?, APT_STATUS=?, APT_ZIP_CODE=? where PK_APT_NUM_ID=? 
2017-06-16 16:40:39 [main] DEBUG n.t.d.l.l.SLF4JQueryLoggingListener n.t.d.s.SLF4JLogUtils writeLog - Name:, Time:0, Success:False, Type:Prepared, Batch:False, QuerySize:1, BatchSize:0, Query:["update APPLICANT set APT_AGE_CRE=?, APT_DTE_CRE=?, APT_AGE_UPD=?, APT_DTE_UPD=?, APT_ADDRESS=?, APT_BIRTHDATE=?, APT_CITY=?, APT_FIRSTNAME=?, APT_INTERNAL_REF=?, APT_LASTNAME=?, APT_MATRICULE=?, APT_NATIONALITY=?, APT_COUNTRY=?, APT_SEX=?, APT_STATUS=?, APT_ZIP_CODE=? where PK_APT_NUM_ID=?"], Params:[(NULL(INTEGER),NULL(TIMESTAMP),1,2017-06-16 16:40:39.618,1, rue des totos,1985-12-30 00:00:00.0,NULL(VARCHAR),Toto,NULL(INTEGER),Xyz,1122222222126,127,127,M,NULL(VARCHAR),NULL(INTEGER),1)] 
2017-06-16 16:40:39 [main] WARN o.h.e.j.s.SqlExceptionHelper o.h.e.j.s.SqlExceptionHelper logExceptions - SQL Error: 1407, SQLState: 72000 
2017-06-16 16:40:39 [main] ERROR o.h.e.j.s.SqlExceptionHelper o.h.e.j.s.SqlExceptionHelper logExceptions - ORA-01407: cannot update ("AFICOM"."APPLICANT"."APT_DTE_CRE") to NULL 

2017-06-16 16:40:39 [main] INFO o.h.e.j.b.i.AbstractBatchImpl o.h.e.j.b.i.AbstractBatchImpl release - HHH000010: On release of batch it still contained JDBC statements 
2017-06-16 16:40:39 [main] ERROR o.h.i.ExceptionMapperStandardImpl o.h.i.ExceptionMapperStandardImpl mapManagedFlushFailure - HHH000346: Error during managed flush [org.hibernate.exception.ConstraintViolationException: could not execute statement] 
2017-06-16 16:40:39 [main] WARN o.s.t.c.TestContextManager o.s.t.c.TestContextManager afterTestMethod - Caught exception while allowing TestExecutionListener [org.springframew[email protected]4cf4d528] to process 'after' execution for test: method [public void TestRepo.saveApplicant()], instance [[email protected]], exception [null] 
org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement 
    at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:278) 
    at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:244) 
    at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:521) 
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:761) 
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:730) 
    at org.springframework.test.context.transaction.TransactionContext.endTransaction(TransactionContext.java:128) 
    at org.springframework.test.context.transaction.TransactionalTestExecutionListener.afterTestMethod(TransactionalTestExecutionListener.java:227) 
    at org.springframework.test.context.TestContextManager.afterTestMethod(TestContextManager.java:319) 
    at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:94) 
    at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84) 
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:252) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) 
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191) 
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137) 
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68) 
    at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:51) 
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242) 
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70) 
Caused by: org.hibernate.exception.ConstraintViolationException: could not execute statement 
    at org.hibernate.dialect.Oracle8iDialect$3.convert(Oracle8iDialect.java:551) 
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42) 
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:111) 
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:97) 
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:208) 
    at org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch.addToBatch(NonBatchingBatch.java:45) 
    at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:3188) 
    at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:3067) 
    at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:3447) 
    at org.hibernate.action.internal.EntityUpdateAction.execute(EntityUpdateAction.java:145) 
    at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:589) 
    at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:463) 
    at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:337) 
    at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:39) 
    at org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1435) 
    at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:491) 
    at org.hibernate.internal.SessionImpl.flushBeforeTransactionCompletion(SessionImpl.java:3201) 
    at org.hibernate.internal.SessionImpl.beforeTransactionCompletion(SessionImpl.java:2411) 
    at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.beforeTransactionCompletion(JdbcCoordinatorImpl.java:467) 
    at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.beforeCompletionCallback(JdbcResourceLocalTransactionCoordinatorImpl.java:146) 
    at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.access$100(JdbcResourceLocalTransactionCoordinatorImpl.java:38) 
    at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.commit(JdbcResourceLocalTransactionCoordinatorImpl.java:220) 
    at org.hibernate.engine.transaction.internal.TransactionImpl.commit(TransactionImpl.java:68) 
    at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:517) 
    ... 24 common frames omitted 
Caused by: java.sql.SQLException: ORA-01407: cannot update ("AFICOM"."APPLICANT"."APT_DTE_CRE") to NULL 

    at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:494) 
    at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:446) 
    at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1054) 
    at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:623) 
    at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:252) 
    at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:612) 
    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:226) 
    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:59) 
    at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:910) 
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1119) 
    at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3780) 
    at oracle.jdbc.driver.T4CPreparedStatement.executeInternal(T4CPreparedStatement.java:1343) 
    at oracle.jdbc.driver.OraclePreparedStatement.executeLargeUpdate(OraclePreparedStatement.java:3865) 
    at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3845) 
    at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:1061) 
    at org.apache.tomcat.dbcp.dbcp2.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:97) 
    at org.apache.tomcat.dbcp.dbcp2.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:97) 
    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 net.ttddyy.dsproxy.proxy.PreparedStatementProxyLogic.invoke(PreparedStatementProxyLogic.java:171) 
    at net.ttddyy.dsproxy.proxy.jdk.PreparedStatementInvocationHandler.invoke(PreparedStatementInvocationHandler.java:32) 
    at com.sun.proxy.$Proxy63.executeUpdate(Unknown Source) 
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:205) 
    ... 43 common frames omitted 
Caused by: oracle.jdbc.OracleDatabaseException: ORA-01407: cannot update ("AFICOM"."APPLICANT"."APT_DTE_CRE") to NULL 

    at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:498) 
    ... 67 common frames omitted 


Process finished with exit code -1 

Antwort

1

Oh mein Gott ... das war so dumm .... Ich habe das Problem gefunden m hier: https://github.com/jhipster/generator-jhipster/issues/1774.

Das Problem war, dass ich ein Update mache und während der Aktualisierung der creatby und createDate immer NULL sind. Ich habe wissen, dass "updatable = false" beiden Feldern hinzugefügt wurde und jetzt funktioniert.

Also mein AbstractAuditedEntity sieht einige, was wie diese, bitte die "aktualisierbar = false" note:

@CreatedBy 
    @OneToOne @JoinColumn(name = "APT_AGE_CRE", nullable = false, updatable = false) 
    protected Agent createdBy; 

    @CreatedDate 
    @Type(type = "org.jadira.usertype.dateandtime.threeten.PersistentZonedDateTime") 
    @Column(name = "APT_DTE_CRE", nullable = false, updatable = false) //@DateTimeFormat(pattern = "dd/MM/yyyy HH:mm") 
    protected ZonedDateTime creationTime; 
Verwandte Themen