JPA Problem mit Cascading

Diskutiere Problem mit Cascading im Data Tier Forum; Hi, ich habe kein Problem mit Cascading bzw irgendwas mache ich falsch. Mein Verstaendnis von Cascading ist, dass man eine Entity in einer...

  1. saw
    saw Neues Mitglied
    Hi, ich habe kein Problem mit Cascading bzw irgendwas mache ich falsch. Mein Verstaendnis von Cascading ist, dass man eine Entity in einer Collection einer anderen Entity haengt und dann sein persist auf die letzter macht. Erstere sollte automatisch auch gespeichert werden - aber irgendwas muss ich wohl falsch machen:

    Code (Text):

    @Entity
    @DiscriminatorValue("typ1")
    public class AccountType1 extends Account {
       
        @ManyToMany(cascade=CascadeType.PERSIST)
        @ElementCollection(fetch=FetchType.LAZY)
        private Set<Tag> tags;
       
            ...
    Code (Text):
    @Entity
    public class Tag extends PersistentObject {
       
        private String value;

    Tag erzeugen und abspeichern:
    Code (Text):

    EntityManager em = Persistence.createEntityManagerFactory("trainingbroker").createEntityManager();

    Tag tag = new Tag():
    tag.setValue("some value");

    AccountType1 account = DAO.getAccountById(id);
    account.getTags().add(tag);

    em.getTransaction().begin();
    em.persist(account);
    em.getTransaction().commit();
     
    Als Ergebnis des ganzen bekomme ich

    Code (Text):

    May 05, 2014 10:22:11 AM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
    WARN: SQL Error: 1452, SQLState: 23000
    May 05, 2014 10:22:11 AM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
    ERROR: Cannot add or update a child row: a foreign key constraint fails
    ...
    Caused by: javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: could not execute statement
    ...
    Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`broker`.`AccountType1_Tag`, CONSTRAINT `FK_4mgh05pk0sxra0m6agwqmcy23` FOREIGN KEY (`tags_id`) REFERENCES `Tag` (`id`))
    ...
    javax.persistence.RollbackException: Error while committing the transaction
        at org.hibernate.jpa.internal.TransactionImpl.commit(TransactionImpl.java:94)
     
    Ich kann es zwar aus der Fehlermeldung nicht richtig rauslesen, aber ich vermute, dass es daran liegt, dass der Tag keine id hat und der dann in der Tabelle AccountType1_Tag einen leeren String versucht zu schreiben.

    Wie macht man das richtig? Der Punkt ist, dass ich keine eigene Methode anbieten will um einen Tag anzulegen, sondern dieser immer im Zusammenhang mit einer anderen Entity erzeugt werden muss. Also erst ein persist auf den Tag und dann auf den AccountType1 ist keine Option.

    Gruesse
    saw
     
    Zuletzt bearbeitet: 5. Mai 2014
  2. Vielleicht hilft dir dieser Java-Kurs hier weiter --> (hier klicken)
  3. saw
    saw Neues Mitglied
Die Seite wird geladen...

Problem mit Cascading - Ähnliche Themen

3D Objekt Translation basierend auf Rotation (Probleme mit Z Rotation)
3D Objekt Translation basierend auf Rotation (Probleme mit Z Rotation) im Forum Allgemeine Java-Themen
Druck Probleme mit PDF dateien
Druck Probleme mit PDF dateien im Forum Allgemeine Java-Themen
Problem mit Schleifen
Problem mit Schleifen im Forum Java Basics - Anfänger-Themen
Problem mit Eclipse
Problem mit Eclipse im Forum Java Basics - Anfänger-Themen
Problem beim Berechnen der größten Fläche eines Ringes
Problem beim Berechnen der größten Fläche eines Ringes im Forum Allgemeine Java-Themen
Thema: Problem mit Cascading