|
|||||||
|
|
|
![]() |
|
|
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: 00:09.




















