Forum Programmazione

Problemi di programmazione? Forum di supporto nato nel 2006, posta subito la tua domanda! :-)

Oggi è sab mag 19, 2012 8:25 am

Tutti gli orari sono UTC + 2 ore




Apri un nuovo argomento Rispondi all’argomento  [ 1 messaggio ] 
Autore Messaggio
 Oggetto del messaggio: Relazione ono a molti [hibernate]
MessaggioInviato: dom gen 22, 2012 5:52 pm 
Non connesso
Newbies

Iscritto il: dom dic 12, 2010 1:38 pm
Messaggi: 6
Salve a tutti,
mi sto approcciando ora a hibernate ammetto nona non senza delle difficolta data la mia scarsa e obsoleta preparazione in ambito db.

Cio che vorrei fare è mappare una semplice classe Customer che contiene una List di oggetti Name come di seguito:
Codice:
@Entity
public class Customer implements Serializable{
   @XmlAttribute(name="rid")
   public String rid;
   @XmlAttribute(name="simpleName")
   public String simpleName;
   @XmlElement(name = "name")
   public List<Name> name;

   @Id
   @GeneratedValue(generator="hibernate-uuid")
   @GenericGenerator(name="hibernate-uuid", strategy = "uuid")
   public String getRid() {
      return rid;
   }
   
   public String getSimpleName() {
      return simpleName;
   }
   
   @OneToMany(targetEntity=Name.class, mappedBy="customer", cascade=CascadeType.ALL, fetch=FetchType.LAZY )
   public List<Name> getName() {
      return name;
   }

   public void setRid(String rid) {this.rid = rid;}
   public void setSimpleName(String simpleName) {this.simpleName = simpleName;}
   public void setName(List<Name> name) {this.name = name;}
}

@Entity
public class Name implements Serializable {
   @XmlAttribute(name = "rid")
   public String rid;
   @XmlElement(name = "description")
   public String description;
   @XmlElement(name = "language")
   public String language;
   public Customer customer;
   
   @Id
   @GeneratedValue(generator = "system-uuid")
   @GenericGenerator(name = "system-uuid", strategy = "uuid")
   public String getRid() {
      return rid;
   }

   @ManyToOne
   @JoinColumn(name = "name")
   public Customer getCustomer() {
      return customer;
   }

   public String getDescription() {return description;}
   public String getLanguage() {return language;}

   public void setRid(String rid) {this.rid = rid;}
   public void setDescription(String description) {this.description = description;}
   public void setLanguage(String language) {   this.language = language;}
   public void setCustomer(Customer Customer) {this.customer = Customer;}
}

Cio che ottengo è:

    create table Name (
        rid varchar(36) not null,
        description varchar(255),
        language varchar(255),
        name varchar(36),
        primary key (rid)
    )

    create table customer (
        rid varchar(36) not null,
        simpleName varchar(255),
        primary key (rid)
    )

    alter table Name
        add index FK24EEAB295251 (name),
        add constraint FK24EEAB295251
        foreign key (name)
        references customer (rid)

A questo cerco di aggiungere un Customer al mio db...

   private static void newCustomer(){
      Customer customer = new Customer();
      ArrayList<Name> nameList = new ArrayList<Name>();
      Name name = new Name();
      name.setDescription("Duke");
      name.setLanguage(Language.EN.toString());
         nameList.add(name);
      name.setDescription("Duca");
      name.setLanguage(Language.IT.toString());
         nameList.add(name);
      name.setDescription("Ducas");
      name.setLanguage(Language.DE.toString());
         nameList.add(name);
      
      customer.setSimpleName("duke");
      customer.setName(nameList);
      
      dbEngine.createBean(DbSchemas.MANAGEMENT, customer);
   }

   public void createBean(DbSchemas dbSchemas, Object bean) {
      DbConnector connector = getDbConnector(dbSchemas);
      connector.getConfiguration().addAnnotatedClass(bean.getClass());
      Transaction tx = null;
      Session session = connector.getSessionFactoryUtil().getInstance().getCurrentSession();
      connector.getSessionFactoryUtil().openSession();
      try {
         tx = session.beginTransaction();
         session.save(bean);
         tx.commit();
      } catch (RuntimeException e) {
         if (tx != null && tx.isActive()) {
            try {
               // Second try catch as the rollback could fail as well
               tx.rollback();
            } catch (HibernateException e1) {
               System.out.println("Error rolling back transaction");
            }
            // throw again the first exception
            throw e;
         }
      }
   }


ma ottengo:


Exception in thread "main" org.hibernate.AnnotationException: Use of @OneToMany or @ManyToMany targeting an unmapped class: migration.masterDataSet.management.contacts.Customer.name[migration.masterDataSet.management.contacts.Name]
   at org.hibernate.cfg.annotations.CollectionBinder.bindManyToManySecondPass(CollectionBinder.java:1160)
   at org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(CollectionBinder.java:691)
   at org.hibernate.cfg.annotations.CollectionBinder$1.secondPass(CollectionBinder.java:626)
   at org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:66)
   at org.hibernate.cfg.Configuration.originalSecondPassCompile(Configuration.java:1586)
   at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1359)
   at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1724)
   at migration.hibernate.dBServices.SessionFactoryUtil.<init>(SessionFactoryUtil.java:27)
   at migration.hibernate.dBServices.DbConnector.getSessionFactoryUtil(DbConnector.java:28)
   at migration.hibernate.dBServices.DbEngine.createBean(DbEngine.java:119)
   at migration.hibernate.dBServices.MigrationDbCreator.newCustomer(MigrationDbCreator.java:55)
   at migration.hibernate.dBServices.MigrationDbCreator.main(MigrationDbCreator.java:22)

Credo che il problema sia dato dal fatto che nella mia tabella Customer non esista di fatto una colonna name.
Ho sbagliato qualcosa nell'implementazione oppure significa che devo io salvare gli oggetti name separatamente nella tabella Name e di conseguenza anche quando carichero un oggetto Customer dovro andare a caricare la List<Name> separatamente e settarla al suo customer?

Potete aiutarmi a capire concettualmente dove sta l'errore...
Grazie in anticipo per ogni aiuto.


Top
 Profilo E-mail  
 
Visualizza ultimi messaggi:  Ordina per  
Apri un nuovo argomento Rispondi all’argomento  [ 1 messaggio ] 

Tutti gli orari sono UTC + 2 ore


Chi c’è in linea

Visitano il forum: Google [Bot] e 1 ospite


Non puoi aprire nuovi argomenti
Non puoi rispondere negli argomenti
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi inviare allegati

Cerca per:
Vai a:  
cron
SitemapIndex SitemapIndex RSS Feed RSS Feed Channel list Channel list
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traduzione Italiana phpBB.it
phpBB SEO