Search...
FAQs
Subscribe
Pie
FAQs
Recent topics
Flagged topics
Hot topics
Best topics
Search...
Search within Object Relational Mapping
Search Coderanch
Advance search
Google search
Register / Login
Post Reply
Bookmark Topic
Watch Topic
New Topic
programming forums
Java
Mobile
Certification
Databases
Caching
Books
Engineering
Micro Controllers
OS
Languages
Paradigms
IDEs
Build Tools
Frameworks
Application Servers
Open Source
This Site
Careers
Other
Pie Elite
all forums
this forum made possible by our volunteer staff, including ...
Marshals:
Campbell Ritchie
Jeanne Boyarsky
Ron McLeod
Paul Clapham
Liutauras Vilda
Sheriffs:
paul wheaton
Rob Spoor
Devaka Cooray
Saloon Keepers:
Stephan van Hulst
Tim Holloway
Carey Brown
Frits Walraven
Tim Moores
Bartenders:
Mikalai Zaikin
Forum:
Object Relational Mapping
One-To-Many Bidirectional org.hibernate.exception.ConstraintViolationException on DELETE
Markus Schmider
Ranch Hand
Posts: 153
3
posted 9 years ago
Number of slices to send:
Optional 'thank-you' note:
Send
@Entity @NamedQueries({ @NamedQuery(name="Aktion.findAll", query="SELECT a FROM Aktion a"), @NamedQuery(name="Aktion.deleteAll", query="DELETE FROM Aktion a") }) public class Aktion implements Serializable{ private static final long serialVersionUID = 1813567411840280048L; public final static String FIND_ALL = "Aktion.findAll"; public final static String DELETE_ALL = "Aktion.deleteAll"; @Id @GeneratedValue private Long id; private String name; @OneToMany(mappedBy="aktion", fetch=FetchType.EAGER, cascade=CascadeType.ALL) private List<Spende> spenden; //omitting getter and setters } @Entity public class Spende implements Serializable{ private static final long serialVersionUID = -4767818208249381590L; @Id @GeneratedValue private Long id; private String name; private Double amount; @ManyToOne private Aktion aktion;
@Stateless public class AktionDAOBean implements AktionDAO { @PersistenceContext private EntityManager em; @Override public void save(Aktion aktion) { em.persist(aktion); } @Override public List<Aktion> getAll() { TypedQuery<Aktion> query = em.createNamedQuery(Aktion.FIND_ALL, Aktion.class); return query.getResultList(); } @Override public void deleteAll() { Query query = em.createNamedQuery(Aktion.DELETE_ALL); query.executeUpdate(); } }
package jpatest.control.test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import java.util.List; import javax.ejb.EJB; import jpatest.control.AktionDAO; import jpatest.control.AktionDAOBean; import jpatest.entity.Aktion; import jpatest.entity.Spende; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian; import org.jboss.arquillian.persistence.Cleanup; import org.jboss.arquillian.persistence.PersistenceTest; import org.jboss.arquillian.persistence.TestExecutionPhase; import org.jboss.shrinkwrap.api.Archive; import org.jboss.shrinkwrap.api.ShrinkWrap; import org.jboss.shrinkwrap.api.spec.WebArchive; import org.junit.Test; import org.junit.runner.RunWith; @RunWith(Arquillian.class) public class AktionDAOTest { @EJB AktionDAO aktionDAO; @Deployment public static Archive<?> createTestArchive() { return ShrinkWrap.create(WebArchive.class, "test.war") .addClasses(Aktion.class, Spende.class, AktionDAO.class, AktionDAOBean.class) .addAsResource("META-INF/persistence.xml"); } @Test public void addAktion() { aktionDAO.deleteAll(); Aktion aktion = new Aktion(); aktion.setName("Bla"); Spende spende = new Spende(); spende.setName("Hans"); spende.setAmount(1000.0); aktion.addSpende(spende); spende.setAktion(aktion); aktionDAO.save(aktion); List<Aktion> aktionen = aktionDAO.getAll(); assertNotNull(aktionen); assertEquals(1, aktionen.size()); Aktion aktionP = aktionen.get(0); assertEquals("Bla", aktion.getName()); // Spende spendeP = aktionP.getSpenden().get(0); // assertNotNull(spendeP); } }
When I run the
test
I get
javax.ejb.EJBException: javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: could not execute statement at org.jboss.as.ejb3.tx.CMTTxInterceptor.handleExceptionInOurTx(CMTTxInterceptor.java:165) .... Caused by: org.jboss.arquillian.test.spi.ArquillianProxyException: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException : Cannot delete or update a parent row: a foreign key constraint fails (`jpatest/spende`, CONSTRAINT `FK93FC16E79E150C44` FOREIGN KEY (`aktion_id`) REFERENCES `aktion` (`id`)) [Proxied because : Original exception not deserilizable, ClassNotFoundException]
I thought CascadeType.ALL would take care of this. What's my mistake?
Thanks for any input.
Don't get me started about those stupid
light bulbs
.
reply
reply
Bookmark Topic
Watch Topic
New Topic
Boost this thread!
Similar Threads
Mysql auto generated PK used for another table and JPA
problem persisting an object with collections and manytomany relationship
Converter give null pointer exception
EJB3 JPA entities OntoMAny two jar
JSF2 eclipse
More...