Reputation: 21
Since some days ago I cannot find a solution to the following problem:
My application contains the entities:
- Wording
- Language
- Category
- Example
With the following relationships:
Wording 1 ------->------- 1 Language
Wording 1 ------->------- 1 Category
Category 1 ------>--------1 Language
Wording 1 ------->--------* Example
My target is to delete a Language and consequently the rest of entities get deleted on cascade. For example, if I delete the language "English", all categories and wordings should be deleted, and also the examples linked to the wordings.
This works when I do the SQL schema, manually, on my Derby database (in memory), only setting "ON DELETE CASCADE" on all foreign keys. Then I run:
DELETE FROM Language WHERE name = 'English';
But something I am doing wrong when I configure my @Entities, because it returns issues concerning the Examples. If the Wording contains no examples, then the deletion works as a charm, otherwise I receive the error:
org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement
More info:
@Entity
@Table (name = "Wording")
public class Wording implements Serializable {
(...)
private long wordingId;
private Language language;
private Category category;
private Set <Example> examples = new HashSet<>();
(...)
@Id
@Column(name = "wordingId", unique = true, nullable = false)
@GeneratedValue(strategy = GenerationType.AUTO)
public long getWordingId() {
return wordingId;
}
@ManyToOne
@Access(AccessType.PROPERTY)
@OnDelete(action = OnDeleteAction.CASCADE)
@JoinColumn(name = "languageId", nullable = false)
public Language getLanguage() {
return language;
}
@ManyToOne
@Access(AccessType.PROPERTY)
@OnDelete(action = OnDeleteAction.CASCADE)
@JoinColumn(name = "categoryId", nullable = false)
public Category getCategory() {
return category;
}
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
@OnDelete(action = OnDeleteAction.CASCADE)
@JoinColumn(name = "wordingId")
public Set<Example> getExamples() {
return examples;
}
(...)
Therefore my question is: Why this configuration does not reproduce the same SQL schema, that I did before, manually, and works?
Thanks! ;-)
EDIT:
Below part of the stack: (It arises when deleting all languages)
2017-10-10 17:56:52.421 DEBUG 6120 --- [ main] org.hibernate.SQL : select examples0_.wording_id as wording_6_1_0_, examples0_.example_id as example_1_1_0_, examples0_.example_id as example_1_1_1_, examples0_.created_on as created_2_1_1_, examples0_.enable as enable3_1_1_, examples0_.example as example4_1_1_, examples0_.modified_on as modified5_1_1_ from example examples0_ where examples0_.wording_id=? Hibernate: select examples0_.wording_id as wording_6_1_0_, examples0_.example_id as example_1_1_0_, examples0_.example_id as example_1_1_1_, examples0_.created_on as created_2_1_1_, examples0_.enable as enable3_1_1_, examples0_.example as example4_1_1_, examples0_.modified_on as modified5_1_1_ from example examples0_ where examples0_.wording_id=? 2017-10-10 17:56:52.427 TRACE 6120 --- [ main] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [BIGINT] - [1] 2017-10-10 17:56:52.444 DEBUG 6120 --- [
main] org.hibernate.SQL : select language0_.language_id as language1_2_, language0_.created_on as created_2_2_, language0_.enable as enable3_2_, language0_.flag as flag4_2_, language0_.language as language5_2_, language0_.modified_on as modified6_2_ from languagge language0_ Hibernate: select language0_.language_id as language1_2_, language0_.created_on as created_2_2_, language0_.enable as enable3_2_, language0_.flag as flag4_2_, language0_.language as language5_2_, language0_.modified_on as modified6_2_ from languagge language0_ 2017-10-10 17:56:52.456 DEBUG 6120 --- [ main] org.hibernate.SQL
: delete from languagge where language_id=? Hibernate: delete from languagge where language_id=? 2017-10-10 17:56:52.473 TRACE 6120 --- [ main] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [BIGINT] - [1] 2017-10-10 17:56:52.505 DEBUG 6120 --- [
main] org.hibernate.SQL : insert into languagge (language_id, created_on, enable, flag, language, modified_on) values (default, ?, ?, ?, ?, ?) Hibernate: insert into languagge (language_id, created_on, enable, flag, language, modified_on) values (default, ?, ?, ?, ?, ?) 2017-10-10 17:56:52.505 TRACE 6120 --- [
main] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [TIMESTAMP] - [Tue Oct 10 17:56:52 CEST 2017] 2017-10-10 17:56:52.506 TRACE 6120 --- [ main] o.h.type.descriptor.sql.BasicBinder : binding parameter [2] as [SMALLINT] - [true] 2017-10-10 17:56:52.506 TRACE 6120 --- [
main] o.h.type.descriptor.sql.BasicBinder : binding parameter [3] as [VARBINARY] - [null] 2017-10-10 17:56:52.506 TRACE 6120 --- [
main] o.h.type.descriptor.sql.BasicBinder : binding parameter [4] as [VARCHAR] - [English] 2017-10-10 17:56:52.506 TRACE 6120 --- [
main] o.h.type.descriptor.sql.BasicBinder : binding parameter [5] as [TIMESTAMP] - [Tue Oct 10 17:56:52 CEST 2017] 2017-10-10 17:56:52.507 DEBUG 6120 --- [ main] org.hibernate.SQL
: values identity_val_local() Hibernate: values identity_val_local() 2017-10-10 17:56:52.509 DEBUG 6120 --- [ main] org.hibernate.SQL : insert into category (category_id, category, created_on, enable, language_id, modified_on) values (default, ?, ?, ?, ?, ?) Hibernate: insert into category (category_id, category, created_on, enable, language_id, modified_on) values (default, ?, ?, ?, ?, ?) 2017-10-10 17:56:52.510 TRACE 6120 --- [ main] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [VARCHAR] - [myCategory] 2017-10-10 17:56:52.510 TRACE 6120 --- [ main] o.h.type.descriptor.sql.BasicBinder
: binding parameter [2] as [TIMESTAMP] - [Tue Oct 10 17:56:52 CEST 2017] 2017-10-10 17:56:52.510 TRACE 6120 --- [ main] o.h.type.descriptor.sql.BasicBinder : binding parameter [3] as [SMALLINT] - [true] 2017-10-10 17:56:52.511 TRACE 6120 --- [
main] o.h.type.descriptor.sql.BasicBinder : binding parameter [4] as [BIGINT] - [2] 2017-10-10 17:56:52.511 TRACE 6120 --- [
main] o.h.type.descriptor.sql.BasicBinder : binding parameter [5] as [TIMESTAMP] - [Tue Oct 10 17:56:52 CEST 2017] 2017-10-10 17:56:52.511 DEBUG 6120 --- [ main] org.hibernate.SQL
: values identity_val_local() Hibernate: values identity_val_local() 2017-10-10 17:56:52.551 DEBUG 6120 --- [ main] org.hibernate.SQL : insert into wording (wording_id, category_id, created_on, image, language_id, modified_on, wording) values (default, ?, ?, ?, ?, ?, ?) Hibernate: insert into wording (wording_id, category_id, created_on, image, language_id, modified_on, wording) values (default, ?, ?, ?, ?, ?, ?) 2017-10-10 17:56:52.552 TRACE 6120 --- [ main] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [BIGINT] - [2] 2017-10-10 17:56:52.552 TRACE 6120 --- [
main] o.h.type.descriptor.sql.BasicBinder : binding parameter [2] as [TIMESTAMP] - [Tue Oct 10 17:56:52 CEST 2017] 2017-10-10 17:56:52.552 TRACE 6120 --- [ main] o.h.type.descriptor.sql.BasicBinder : binding parameter [3] as [BLOB] - [[B@1769d] 2017-10-10 17:56:52.552 TRACE 6120 --- [
main] o.h.type.descriptor.sql.BasicBinder : binding parameter [4] as [BIGINT] - [2] 2017-10-10 17:56:52.553 TRACE 6120 --- [
main] o.h.type.descriptor.sql.BasicBinder : binding parameter [5] as [TIMESTAMP] - [Tue Oct 10 17:56:52 CEST 2017] 2017-10-10 17:56:52.553 TRACE 6120 --- [ main] o.h.type.descriptor.sql.BasicBinder : binding parameter [6] as [VARCHAR] - [MyWording] 2017-10-10 17:56:52.554 DEBUG 6120 --- [
main] org.hibernate.SQL : values identity_val_local() Hibernate: values identity_val_local() 2017-10-10 17:56:52.555 DEBUG 6120 --- [ main] org.hibernate.SQL
: insert into example (example_id, created_on, enable, example, modified_on) values (default, ?, ?, ?, ?) Hibernate: insert into example (example_id, created_on, enable, example, modified_on) values (default, ?, ?, ?, ?) 2017-10-10 17:56:52.559 TRACE 6120 --- [
main] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [TIMESTAMP] - [Tue Oct 10 17:56:52 CEST 2017] 2017-10-10 17:56:52.559 TRACE 6120 --- [ main] o.h.type.descriptor.sql.BasicBinder : binding parameter [2] as [SMALLINT] - [true] 2017-10-10 17:56:52.559 TRACE 6120 --- [
main] o.h.type.descriptor.sql.BasicBinder : binding parameter [3] as [VARCHAR] - [myExample] 2017-10-10 17:56:52.560 TRACE 6120 --- [
main] o.h.type.descriptor.sql.BasicBinder : binding parameter [4] as [TIMESTAMP] - [Tue Oct 10 17:56:52 CEST 2017] 2017-10-10 17:56:52.561 DEBUG 6120 --- [ main] org.hibernate.SQL
: values identity_val_local() Hibernate: values identity_val_local() 2017-10-10 17:56:52.562 DEBUG 6120 --- [ main] org.hibernate.SQL : insert into example (example_id, created_on, enable, example, modified_on) values (default, ?, ?, ?, ?) Hibernate: insert into example (example_id, created_on, enable, example, modified_on) values (default, ?, ?, ?, ?) 2017-10-10 17:56:52.562 TRACE 6120 --- [ main] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [TIMESTAMP] - [Tue Oct 10 17:56:52 CEST 2017] 2017-10-10 17:56:52.562 TRACE 6120 --- [ main] o.h.type.descriptor.sql.BasicBinder
: binding parameter [2] as [SMALLINT] - [true] 2017-10-10 17:56:52.563 TRACE 6120 --- [ main] o.h.type.descriptor.sql.BasicBinder
: binding parameter [3] as [VARCHAR] - [myAnotherExample] 2017-10-10 17:56:52.563 TRACE 6120 --- [ main] o.h.type.descriptor.sql.BasicBinder : binding parameter [4] as [TIMESTAMP] - [Tue Oct 10 17:56:52 CEST 2017] 2017-10-10 17:56:52.564 DEBUG 6120 --- [ main] org.hibernate.SQL
: values identity_val_local() Hibernate: values identity_val_local() 2017-10-10 17:56:52.566 DEBUG 6120 --- [ main] org.hibernate.SQL : update example set wording_id=? where example_id=? Hibernate: update example set wording_id=? where example_id=? 2017-10-10 17:56:52.572 TRACE 6120 --- [ main] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [BIGINT] - [2] 2017-10-10 17:56:52.573 TRACE 6120 --- [ main] o.h.type.descriptor.sql.BasicBinder : binding parameter [2] as [BIGINT] - [1] 2017-10-10 17:56:52.575 DEBUG 6120 --- [ main] org.hibernate.SQL : update example set wording_id=? where example_id=? Hibernate: update example set wording_id=? where example_id=? 2017-10-10 17:56:52.576 TRACE 6120 --- [ main] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [BIGINT] - [2] 2017-10-10 17:56:52.576 TRACE 6120 --- [ main] o.h.type.descriptor.sql.BasicBinder : binding parameter [2] as [BIGINT] - [2] 2017-10-10 17:56:52.592 DEBUG 6120 --- [ main] org.hibernate.SQL : select wording0_.wording_id as wording_1_4_0_, wording0_.category_id as category6_4_0_, wording0_.created_on as created_2_4_0_, wording0_.image as image3_4_0_, wording0_.language_id as language7_4_0_, wording0_.modified_on as modified4_4_0_, wording0_.wording as wording5_4_0_, category1_.category_id as category1_0_1_, category1_.category as category2_0_1_, category1_.created_on as created_3_0_1_, category1_.enable as enable4_0_1_, category1_.language_id as language6_0_1_, category1_.modified_on as modified5_0_1_, language2_.language_id as language1_2_2_, language2_.created_on as created_2_2_2_, language2_.enable as enable3_2_2_, language2_.flag as flag4_2_2_, language2_.language as language5_2_2_, language2_.modified_on as modified6_2_2_, examples3_.wording_id as wording_6_1_3_, examples3_.example_id as example_1_1_3_, examples3_.example_id as example_1_1_4_, examples3_.created_on as created_2_1_4_, examples3_.enable as enable3_1_4_, examples3_.example as example4_1_4_, examples3_.modified_on as modified5_1_4_, language4_.language_id as language1_2_5_, language4_.created_on as created_2_2_5_, language4_.enable as enable3_2_5_, language4_.flag as flag4_2_5_, language4_.language as language5_2_5_, language4_.modified_on as modified6_2_5_ from wording wording0_ inner join category category1_ on wording0_.category_id=category1_.category_id inner join languagge language2_ on category1_.language_id=language2_.language_id left outer join example examples3_ on wording0_.wording_id=examples3_.wording_id left outer join languagge language4_ on wording0_.language_id=language4_.language_id where wording0_.wording_id=? Hibernate: select wording0_.wording_id as wording_1_4_0_, wording0_.category_id as category6_4_0_, wording0_.created_on as created_2_4_0_, wording0_.image as image3_4_0_, wording0_.language_id as language7_4_0_, wording0_.modified_on as modified4_4_0_, wording0_.wording as wording5_4_0_, category1_.category_id as category1_0_1_, category1_.category as category2_0_1_, category1_.created_on as created_3_0_1_, category1_.enable as enable4_0_1_, category1_.language_id as language6_0_1_, category1_.modified_on as modified5_0_1_, language2_.language_id as language1_2_2_, language2_.created_on as created_2_2_2_, language2_.enable as enable3_2_2_, language2_.flag as flag4_2_2_, language2_.language as language5_2_2_, language2_.modified_on as modified6_2_2_, examples3_.wording_id as wording_6_1_3_, examples3_.example_id as example_1_1_3_, examples3_.example_id as example_1_1_4_, examples3_.created_on as created_2_1_4_, examples3_.enable as enable3_1_4_, examples3_.example as example4_1_4_, examples3_.modified_on as modified5_1_4_, language4_.language_id as language1_2_5_, language4_.created_on as created_2_2_5_, language4_.enable as enable3_2_5_, language4_.flag as flag4_2_5_, language4_.language as language5_2_5_, language4_.modified_on as modified6_2_5_ from wording wording0_ inner join category category1_ on wording0_.category_id=category1_.category_id inner join languagge language2_ on category1_.language_id=language2_.language_id left outer join example examples3_ on wording0_.wording_id=examples3_.wording_id left outer join languagge language4_ on wording0_.language_id=language4_.language_id where wording0_.wording_id=? 2017-10-10 17:56:52.604 TRACE 6120 --- [
main] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [BIGINT] - [2] 2017-10-10 17:56:52.633 DEBUG 6120 --- [
main] org.hibernate.SQL : select language0_.language_id as language1_2_, language0_.created_on as created_2_2_, language0_.enable as enable3_2_, language0_.flag as flag4_2_, language0_.language as language5_2_, language0_.modified_on as modified6_2_ from languagge language0_ Hibernate: select language0_.language_id as language1_2_, language0_.created_on as created_2_2_, language0_.enable as enable3_2_, language0_.flag as flag4_2_, language0_.language as language5_2_, language0_.modified_on as modified6_2_ from languagge language0_ 2017-10-10 17:56:52.634 DEBUG 6120 --- [ main] org.hibernate.SQL
: delete from languagge where language_id=? Hibernate: delete from languagge where language_id=? 2017-10-10 17:56:52.634 TRACE 6120 --- [ main] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [BIGINT] - [2] 2017-10-10 17:56:52.649 WARN 6120 --- [
main] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 20000, SQLState: 23503 2017-10-10 17:56:52.650 ERROR 6120 --- [
main] o.h.engine.jdbc.spi.SqlExceptionHelper : DELETE on table 'WORDING' caused a violation of foreign key constraint 'FK_WORDING' for key (2). The statement has been rolled back. 2017-10-10 17:56:52.651 INFO 6120 --- [ main] o.h.e.j.b.internal.AbstractBatchImpl : HHH000010: On release of batch it still contained JDBC statements Tests run: 4, Failures: 0, Errors: 1, Skipped: 1, Time elapsed: 9.076 sec <<< FAILURE! - in com.mycompany.languages.model.dao.WordingDAOTest testDeleteAfterDeletingLanguage(com.mycompany.languages.model.dao.WordingDAOTest) Time elapsed: 0.06 sec <<< ERROR! 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.apache.derby.iapi.error.StandardException.newException(Unknown Source) at org.apache.derby.iapi.error.StandardException.newException(Unknown Source) at org.apache.derby.impl.sql.execute.ReferencedKeyRIChecker.doCheck(Unknown Source) at org.apache.derby.impl.sql.execute.RISetChecker.doPKCheck(Unknown Source) at org.apache.derby.impl.sql.execute.DeleteResultSet.runFkChecker(Unknown Source) at org.apache.derby.impl.sql.execute.DeleteCascadeResultSet.runFkChecker(Unknown Source) at org.apache.derby.impl.sql.execute.DeleteCascadeResultSet.runFkChecker(Unknown Source) at org.apache.derby.impl.sql.execute.DeleteCascadeResultSet.runFkChecker(Unknown Source) at org.apache.derby.impl.sql.execute.DeleteCascadeResultSet.open(Unknown Source) at org.apache.derby.impl.sql.GenericPreparedStatement.executeStmt(Unknown Source) at org.apache.derby.impl.sql.GenericPreparedStatement.execute(Unknown Source) at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(Unknown Source) at org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeStatement(Unknown Source) at org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeLargeUpdate(Unknown Source) at org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeUpdate(Unknown Source) 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.$Proxy104.executeUpdate(Unknown Source) at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:204) at org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch.addToBatch(NonBatchingBatch.java:45) at org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:3261) at org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:3498) at org.hibernate.action.internal.EntityDeleteAction.execute(EntityDeleteAction.java:98) at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:582) at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:456) 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.flush(SessionImpl.java:1282) at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:465) at org.hibernate.internal.SessionImpl.flushBeforeTransactionCompletion(SessionImpl.java:2963) at org.hibernate.internal.SessionImpl.beforeTransactionCompletion(SessionImpl.java:2339) at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.beforeTransactionCompletion(JdbcCoordinatorImpl.java:485) at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.beforeCompletionCallback(JdbcResourceLocalTransactionCoordinatorImpl.java:147) 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:231) at org.hibernate.engine.transaction.internal.TransactionImpl.commit(TransactionImpl.java:65) at org.hibernate.jpa.internal.TransactionImpl.commit(TransactionImpl.java:61) at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:517) at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:761) at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:730) at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:504) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:292) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:133) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.data.repository.core.support.SurroundingTransactionDetectorMethodInterceptor.invoke(SurroundingTransactionDetectorMethodInterceptor.java:57) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213) at com.sun.proxy.$Proxy96.deleteAll(Unknown Source) at com.mycompany.languages.model.dao.WordingDAOTest.setUp(WordingDAOTest.java:222)2017-10-10 17:56:52.694 INFO 6120 --- [ Thread-4] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@865dd6: startup date [Tue Oct 10 17:56:44 CEST 2017]; root of context hierarchy 2017-10-10 17:56:52.698 INFO 6120 --- [ Thread-4] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
Results :
Tests in error: WordingDAOTest.setUp:222 » DataIntegrityViolation could not execute statement;...
Upvotes: 2
Views: 424
Reputation: 419
You got this error because you're trying to delete some languages
that are used in Wording
and Wording
don't accept that language
can be null
so try to use that instead :
@ManyToOne
@Access(AccessType.PROPERTY)
@OnDelete(action = OnDeleteAction.CASCADE)
@JoinColumn(name = "languageId", nullable = true)
public Language getLanguage() {
return language;
}
Upvotes: 1