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 Kurs hier weiter --> (hier klicken)
  3. saw
    saw Neues Mitglied
Die Seite wird geladen...

Problem mit Cascading - Ähnliche Themen

Problem mit der Klasse Crypt
Problem mit der Klasse Crypt im Forum Java Basics - Anfänger-Themen
Problem mit Klasse Crypt
Problem mit Klasse Crypt im Forum Java Basics - Anfänger-Themen
2 Probleme - Datum & private finale Variablen
2 Probleme - Datum & private finale Variablen im Forum Java Basics - Anfänger-Themen
J2V8 NodeJs Java Bride Problem und Frage!?!?
J2V8 NodeJs Java Bride Problem und Frage!?!? im Forum Allgemeine Java-Themen
Java Bomberman Probleme java.lang.NullPointerException
Java Bomberman Probleme java.lang.NullPointerException im Forum Spiele- und Multimedia-Programmierung
Thema: Problem mit Cascading