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;} }Cio che ottengo è:codice:@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;} }
A questo cerco di aggiungere un Customer al mio db...codice: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)
ma ottengo:codice: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; } } }
Credo che il problema sia dato dal fatto che nella mia tabella Customer non esista di fatto una colonna name.codice: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)
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.

Rispondi quotando

