|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Apr 2006
Città: Bergamo
Messaggi: 440
|
[Java] [Hibernate] - Errore di casting?!!!
salve a tutti...sto usando Hibernate (versione 3.2) per un progetto, sto cercando di mappare il database ma ho un paio di problemi...le tabelle che stò cercando di mappare sono le seguenti:
Codice HTML:
______________ __________ | | | | ___________ | CESSIONE | | LAVORO | | | |______________| |__________| | CLIENTE | | | (1,1) | | |___________| | *IdLavoro | <---> | *Id | (1,1) | | | Descrizione | | Cliente | <---> | *Id | |______________| |__________| | Nome | |___________| Codice:
package beans; import java.util.Date; import java.util.HashSet; import java.util.Set; public class Lavoro { private int id; private Date data; private Set cliente = new HashSet(); public Lavoro(){ super(); } //Metodi getter public int getId(){ return id; } public Date getData(){ return data; } public Set getCliente(){ return cliente; } //Metodi setter public void setId(int id){ this.id = id; } public void setData(Date data){ this.data = data; } public void setCliente(Set cliente){ this.cliente = cliente; } } Codice:
package beans; public class Cessione extends Lavoro{ private int idLavoro; private String descrizione; public Cessione(){ super(); } //Metodi getter public int getIdLavoro(){ return super.getId(); } public String getDescrizione(){ return descrizione; } //Metodi setter public void setIdLavoro(int idLavoro){ super.setId(idLavoro); } public void setDescrizione(String descrizione){ this.descrizione = descrizione; } } Codice:
package beans; public class Cliente { private int id; private String nome; public Cliente(){ super(); } //Metodi getter public int getId(){ return id; } public String getNome(){ return nome; } //Metodi setter public void setId(int id){ this.id = id; } public void setNome(String nome){ this.nome = nome; } } Lavoro: Codice:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="beans.Lavoro" table="lavoro"> <id name="id" column="id"> <generator class="identity"/> </id> <one-to-one name="cliente" class="beans.Cliente"/> </class> </hibernate-mapping> Codice:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="beans.Cessione" table="cessione"> <id name="idLavoro" column="idLavoro"> <generator class="foreign"> <param name="property">idLavoro</param> </generator> </id> <one-to-one name="idLavoro" class="beans.Lavoro" foreign-key="id" constrained="true"/> <property name="descrizione"/> </class> </hibernate-mapping> Codice:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="beans.Cliente" table="cliente"> <id name="id" column="id"> <generator class="identity"/> </id> <property name="nome"/> </class> </hibernate-mapping> Codice:
java.lang.ClassCastException: org.hibernate.type.IntegerType cannot be cast to org.hibernate.type.EntityType org.hibernate.id.ForeignGenerator.generate(ForeignGenerator.java:50) org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:99) org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33) org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27) org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535) org.hibernate.impl.SessionImpl.save(SessionImpl.java:523) org.hibernate.impl.SessionImpl.save(SessionImpl.java:519) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) java.lang.reflect.Method.invoke(Unknown Source) org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:301) $Proxy0.save(Unknown Source) test.CessioneTest.doGet(CessioneTest.java:58) javax.servlet.http.HttpServlet.service(HttpServlet.java:690) javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
__________________
Guitar Pub, il sito dedicato al mondo della chitarra e dei chitarristi... e il mio Spazio ------------------------------------ Ho trattato positivamente con: teosc |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2002
Città: Palermo
Messaggi: 4913
|
Ti do una dritta, usando le annotation dovresti scrivere qualcosa di simile anche per le altre classi.
Codice:
@Entity public class Lavoro{ @Id private int id; @Temporal(TemporalType.TIMESTAMP) private Date data; @OneToOne private Cliente cliente; //hai detto tu che c'è un rapporto 1-1 //getters e setters }
__________________
Sun Certified Java Programmer - Sun Certified Web Component Developer - Sun Certified Business Component Developer |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Apr 2006
Città: Bergamo
Messaggi: 440
|
quindi tu dici di dichiarare l'entità "cliente" in lavoro non come HashSet ma come Cliente?
__________________
Guitar Pub, il sito dedicato al mondo della chitarra e dei chitarristi... e il mio Spazio ------------------------------------ Ho trattato positivamente con: teosc |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Apr 2002
Città: Palermo
Messaggi: 4913
|
Se tu hai deciso che per un lavoro c'è uno ed un solo cliente ok, se invece pensi che c'è ne siano di più utilizza qualcosa come
Codice:
public class Lavoro{ @OneToMany(mappedBy = "lavoro") private List<Cliente> clienti; //per un lavoro più clienti ...... } public class Cliente{ @ManyToOne private Lavoro lavoro; //per un lavoro più clienti ...... }
__________________
Sun Certified Java Programmer - Sun Certified Web Component Developer - Sun Certified Business Component Developer |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Apr 2006
Città: Bergamo
Messaggi: 440
|
ho fatto come hai detto tu...ho dichiarato cliente come "Cliente" e non HashSet ma mi da lo stesso errore!!!
![]()
__________________
Guitar Pub, il sito dedicato al mondo della chitarra e dei chitarristi... e il mio Spazio ------------------------------------ Ho trattato positivamente con: teosc |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Apr 2002
Città: Palermo
Messaggi: 4913
|
Le cose che ti ho detto io erano a prescindere dal tuo errore..da qualche parte stai cercando di castare da Intero ad una classe.
Vai in debug mode e controlla dove ottieni l'errore.
__________________
Sun Certified Java Programmer - Sun Certified Web Component Developer - Sun Certified Business Component Developer |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Apr 2006
Città: Bergamo
Messaggi: 440
|
Scusa l'ignoranza ma come si fa ad andare in debug mode
![]() ![]()
__________________
Guitar Pub, il sito dedicato al mondo della chitarra e dei chitarristi... e il mio Spazio ------------------------------------ Ho trattato positivamente con: teosc |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Apr 2002
Città: Palermo
Messaggi: 4913
|
metti un breakpoint sulla possibile riga di codice (o comunque nei paraggi) di errore ed avvia l'applicazione con "Debug On Server".
Se usi Eclipse dovresti notare un bottoncino a forma di scarafaggio ![]()
__________________
Sun Certified Java Programmer - Sun Certified Web Component Developer - Sun Certified Business Component Developer |
![]() |
![]() |
![]() |
#9 |
Member
Iscritto dal: Apr 2006
Messaggi: 225
|
Credo che il tuo problema sia qui
Codice:
<id name="idLavoro" column="idLavoro"> <generator class="foreign"> <param name="property">idLavoro</param> </generator> </id> <one-to-one name="idLavoro" class="beans.Lavoro" foreign-key="id" constrained="true"/> |
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Apr 2006
Città: Bergamo
Messaggi: 440
|
Quote:
Fra l'altro non mi è molto chiaro come funziona il parametro <param name="property">xxxxxxxxx</param> ...non riesco a capire cosa devo mettere (confesso di essere andato un po' a tentativi) e sulla documentazione di hibernate non ho trovato nulla!
__________________
Guitar Pub, il sito dedicato al mondo della chitarra e dei chitarristi... e il mio Spazio ------------------------------------ Ho trattato positivamente con: teosc |
|
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Apr 2006
Città: Bergamo
Messaggi: 440
|
uppettino!!!!
![]()
__________________
Guitar Pub, il sito dedicato al mondo della chitarra e dei chitarristi... e il mio Spazio ------------------------------------ Ho trattato positivamente con: teosc |
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Apr 2006
Città: Bergamo
Messaggi: 440
|
up
![]()
__________________
Guitar Pub, il sito dedicato al mondo della chitarra e dei chitarristi... e il mio Spazio ------------------------------------ Ho trattato positivamente con: teosc |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:18.