Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    Errori con Hibernate Association

    Salve,

    sto seguendo un tutorial su Hibernate Association da questo indirizzo:
    http://www.neeraj.name/43/hibernate-...e-scene-action

    Provo a fare il programma di esempio. Non ricevo errori, ma non mi scrive niente nel DB

    Le classi sono:
    Parent.java
    Codice PHP:
    public class Parent {
       private 
    long id;
       private 
    Set Children;
       public 
    Set getChildren() {return Children;}
       public 
    void setChildren(Set children) { Children children;}
       public 
    long getId() {return id; }
       public 
    void setId(long id) {this.id id;}

    Child.java
    Codice PHP:
    public class Child {
      private 
    long id;
      private 
    String firstName;
      private 
    String lastName;
      public 
    String getFirstName() {return firstName; }
      public 
    void setFirstName(String firstName) {this.firstName =  firstName; }
      public 
    long getId() {return id; }
      public 
    void setId(long id) {this.id id;}
      public 
    String getLastName() {return lastName;}
      public 
    void setLastName(String lastName) {this.lastName lastName;}

    I file di mappaggio sono:
    Parent.hbm.xml
    Codice PHP:
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
      <hibernate -mapping>
       <class name="com.neeraj.Parent"  table="parent">
          <id name="id" type="long"  column="pid">
            <generator class="native"  />
          </id>
          <set name="children" inverse="false"  cascade="none">
             <key column="pid" />
             <one -to-many  class="com.neeraj.Child"  />
         </set>
      </class>
    </hibernate-mapping>
    Child.hbm.xml
    Codice PHP:
    <?xml  version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate -mapping>
       <class name="com.neeraj.Child"  table="child">
          <id name="id" type="long"  column="cid">
              <generator class="native" />
          </id>
          <property name="firstName" column="firstName" />
          <property name="lastName" column="lastName"  />
      </class>
    </hibernate-mapping>
    Ovviamente ho creato le tabelle corrispondenti e il file di configurazione (su quest'ultimo ho qualche dubbio e ne riporto un pezzettino):
    hibernate.cfg.xml
    Codice PHP:
    <hibernate-configuration>
    <
    session-factory>
          
    //Parametri di connessione vari
          
          
    <mapping resource="Parent.hbm.xml"/>
          <
    mapping resource="Child.hbm.xml"/>
    </
    session-factory>
    </
    hibernate-configuration
    Insomma faccio la classe main con questo codice:
    Main.java
    Codice PHP:
    ...
    Parent parent = new Parent();
    Child child = new  Child();
    child.setFirstName("John");
    child.setLastName("Smith");
    Set  children = new  HashSet();
    children.add(child);
    parent.setChildren(children);
    session.saveOrUpdate(child);
    session.saveOrUpdate(parent);
    ... 
    e mi restuisce questo codice sql:
    Codice PHP:
    Hibernateinsert into child (firstNamelastNamevalues (?,  ?)
    Hibernateinsert into parent values ( )
    Hibernateupdate child set  pid=? where cid=? 
    ...in altre parole non mi scrive niente nel DB (anche se crea la foreign key che io nn avevo creato apposta nel fare le tabelle).

    Qualche suggerimento?

    PS: Probabilmente nn avrò risposta vista la prolissità ma nn sapevo come abbreviare


    Grazie dell'attenzione,
    Matteo.
    Gutta cavat lapidem
    [La goccia scava la pietra]
    ***
    (Ovidio)

  2. #2
    Autoreply

    Nel tutorial si saranno dimenticati di aprire/chiudere la transazione mentre si effettua il salvataggio.
    Per i posteri ecco la versione della classe Main corretta:

    Codice PHP:
    package com.neeraj;

    import java.util.*;
    import org.hibernate.*;
    import org.hibernate.cfg.*;

    public class 
    TestParentChild {

        public static 
    void main(String[] args) {
            
    Session session null;
            try {
                
    // This step will read hibernate.cfg.xml and prepare hibernate for use
                
    SessionFactory sessionFactory = new Configuration().configure()
                        .
    buildSessionFactory();
                
    session sessionFactory.openSession();

                
    Parent parent = new Parent();
                
    Child child = new Child();
                
    child.setFirstName("John");
                
    child.setLastName("Smith");
                
    Set children = new HashSet();
                
    children.add(child);
                
    parent.setChildren(children);
                
                
                
                
    session.beginTransaction();
                
    session.saveOrUpdate(child);
                
    session.saveOrUpdate(parent);
                
    session.getTransaction().commit();
            } catch (
    Exception e) {
                
    System.out.println(e.getMessage());
            } finally {
                
    // Actual contact insertion will happen at this step
                
    session.flush();
                
    session.close();

            }

        }

    Gutta cavat lapidem
    [La goccia scava la pietra]
    ***
    (Ovidio)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.