tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
1974
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Lampe Lampe ist offline Mitglied Gold
    Registriert seit
    Nov 2003
    Beiträge
    106
    Hallo,

    ich habe zwei Tabellen die miteinander verknüpft sind.

    Besitzer ----> Adresse

    Folgende Relationen habe ich in die XML Dateien geschrieben:

    Address.hbm.xml
    Code :
    1
    2
    3
    4
    5
    6
    7
    
    <id name="idAddress" column="idAddress">
       <generator class="increment"/>
    </id>
    <property name="street" column="Street" type="string"/>
    ...
    ...
    <one-to-one name="owner" class="cr.dipl.datapool.bean.Owner"/>

    Owner.hbm.xml
    Code :
    1
    2
    3
    4
    5
    6
    
    <id name="idOwner" column="idOwner">
        <generator class="increment"/>
    </id>
    ...
    ...
    <one-to-one name="address" class="cr.dipl.datapool.bean.Address"/>


    Wenn ich nun einen neuen Benutzer hinzufüge, dann will ich auch automatisch die Adresse für den Benutzer einfügen, siehe Beispiel:

    Beispiel:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
            Address address = new Address();
            address.setCity("Berlin");
            address.setCityCode(10245);
            address.setCountry("Berlin");
            address.setStreet("Simon-Dach-Strasse");
            address.setHouseNumber("77");
            
            Owner owner = new Owner();
            owner.setSalutation("Herr");
            owner.setFirstName("testStefan");
            owner.setSecondName("testMeyer");
            owner.setFirmName("Luftland");
                owner.setAddress(address);
            
            session.save(owner);

    Dies funktioniert aber leider nicht, wie geht denn das?

    Danke
     
    <Tsk> oiuyniyu98h987h89yh87y98yjn987j987y897yhkiuk;''''
    <Tsk> sorry.. there was a spider on my keyboard.

  2. #2
    Avatar von Oliver Gierke
    Oliver Gierke Oliver Gierke ist offline Mitglied Rubin
    Registriert seit
    Dec 2003
    Ort
    Mannheim
    Beiträge
    1.457
    Du musst auf der one-to-one Beziehung noch einen CascadeType definieren. Persist und Merge sollte definiert seinen, damit die Referenz bei einem Insert bzw. Update mit angelegt wird.

    Gruß
    Ollie
     
    In theory, there is no difference between theory and practice. In practice, there is!

    www.olivergierke.de

  3. #3
    Lampe Lampe ist offline Mitglied Gold
    Registriert seit
    Nov 2003
    Beiträge
    106
    Bei einem Cascade-All erhalte ich folgende Exception:

    Code :
    1
    2
    3
    4
    
    Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: 
    Cannot add or update a child row: a foreign key constraint fails (`TrackJack/Owner`, 
    CONSTRAINT `fk_Owner_Address` FOREIGN KEY (`Address_idAddress`) 
    REFERENCES `Address` (`idAddress`) ON DELETE CASCADE ON UPDATE CASCADE)
     
    <Tsk> oiuyniyu98h987h89yh87y98yjn987j987y897yhkiuk;''''
    <Tsk> sorry.. there was a spider on my keyboard.

  4. #4
    Avatar von Oliver Gierke
    Oliver Gierke Oliver Gierke ist offline Mitglied Rubin
    Registriert seit
    Dec 2003
    Ort
    Mannheim
    Beiträge
    1.457
    Von cascade all war ja auch keine rede... Bei welcher operation fliegt die exception?
     
    In theory, there is no difference between theory and practice. In practice, there is!

    www.olivergierke.de

  5. #5
    Lampe Lampe ist offline Mitglied Gold
    Registriert seit
    Nov 2003
    Beiträge
    106
    Hast Du nicht ein kurzes Beispiel, vllt. einen Link zu einem Tutorial?

    Z.Z. erhalte ich nämlich folgenden Fehler:

    Code :
    1
    2
    
    org.hibernate.TransientObjectException: object references an unsaved transient 
    instance - save the transient instance before flushing: cr.dipl.datapool.bean.Address
     
    <Tsk> oiuyniyu98h987h89yh87y98yjn987j987y897yhkiuk;''''
    <Tsk> sorry.. there was a spider on my keyboard.

  6. #6
    MrOTJ MrOTJ ist offline Mitglied Bronze
    Registriert seit
    May 2009
    Beiträge
    26
    Hi, also es kommt darauf an ob du es in den Test laufen lässt oder in der Anwendung selber!

    In Tests hast du oft ein Session flush problem!
    Der Fehler, zumindest der erste entsteht, weil die Adresse ja noch nicht in der Datenbank ist!

    Hier mal en Auszug aus meinen Test:

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    Job jobTemp = new Job();
    Job jobTemp = new Job();
    jobTemp.setJobname("Tollwood");
    jobTemp.setCustomer(customer1);
    jobTemp.setState(JobState.NEW);
    Promoter promoterTemp = new Promoter();
    promoterTemp.setPassword("huhu");
    promoterTemp.setUsername("hans");
    promoterTemp.setPromotername("Hansibert");
    jobTemp.getPromoters().add(promoterTemp);
     
    SessionFactoryUtils.getSession(sessionFactory, false).flush();
    int restId = jobDAO.save(jobTemp);


    oder speicher mal die Adresse nach der erzeugung, dann weiss sie zu und speicher nochmal deine Person!

    Ansonsten brav auf Ollihören und dir nochmal das mit dem Cascade anschauen.
    Ist es wichtig das alles sofort nachgeladen wird, oder reicht es bei Benötigung, dann wäre das eben mim flush zu testen!

    Viel Erfolg!
    Geändert von Oliver Gierke (29.05.09 um 06:45 Uhr) Grund: Code tags
     

Ähnliche Themen

  1. Spring2 + Hibernate + Annotations + Service + DAO > insert ?
    Von Nobody im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 8
    Letzter Beitrag: 15.05.09, 12:00
  2. Insert und Update bei mehreren Tabellen
    Von Big Iron im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 03.02.09, 05:48
  3. Hibernate - Datum Insert
    Von y0dA im Forum Java
    Antworten: 3
    Letzter Beitrag: 19.06.07, 10:12
  4. Hibernate - Exception bei insert
    Von y0dA im Forum Java
    Antworten: 33
    Letzter Beitrag: 29.05.07, 12:40
  5. Insert und/oder Update
    Von RedDevilGT im Forum Relationale Datenbanksysteme
    Antworten: 4
    Letzter Beitrag: 06.04.06, 08:45

Stichworte