Ciao a tutti !!!
Sono al mio primo topic su questo sito perchè ultimamente sto cominciando i primi passi in Hibernate 3 ed ho avuto subito un problema.
Innanzitutto ho fatto una semplice prima applicazione ma non ho ancora "deployato" su tomcat.
Ho una tabella di un DB Oracle 9.2 con vari campi, ma essa non ha un campo ID e/o primary key.
Ho creato una classe myBean che voglio contenga solo i valori di 2 campi della tabella, infatti la dalla query che faccio ottengo solo 2 colonne.
Ho letto che un bean in Hibernate ha bisogno di avere un campo ID ...quindi questa è la mia classe:
codice:
package pack;
public class myBean {
private Long id;
private int somma;
private String provincia;
public Long getId() {
return id;
}
private void setId(Long id) {
this.id = id;
}
public int getSomma() {
return somma;
}
public void setSomma(int somma) {
this.somma = somma;
}
public String getProvincia() {
return provincia;
}
public void setProvincia(String provincia) {
this.provincia = provincia;
}
public myBean(){
}
public myBean(int somma,String provincia){
this.setSomma(somma);
this.setProvincia(provincia);
}
public myBean(Long id,int somma,String provincia){
this.setId(id);
this.setSomma(somma);
this.setProvincia(provincia);
}
}
L'ho mappata nel file "myBean.xml"
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 schema="hibernate" package="pack">
<class name="myBean" table="TBL_BIDOTAX" lazy="false">
<id name="id" column="id" >
<generator class="sequence">
<param name="sequence">honey_id_seq</param>
</generator>
</id>
<property name="provincia" column="TAX_PROV"/>
<property name="somma" column="TAX_IMPO"/>
</class>
</hibernate-mapping>
Ho una classe che effettua la select:
codice:
package pack;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
public class utils {
public static List<myBean> listaTutteTasse() {
List<myBean> result=null;
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
Query q = session.createSQLQuery("select TAX_PROV,TAX_IMPO FROM TBL_BIDOTAX");
result = q.list();
tx.commit();
}
catch (HibernateException he) {
if (tx!=null)
tx.rollback();
throw he;
}
finally {
session.close();
}
return result;
}
}
Ed a questo punto ho provato a lanciare una prova.java
codice:
package pack;
import java.util.Iterator;
public class prova {
public static void main(String[] args) {
java.util.List<myBean> lista=pack.utils.listaTutteTasse();
System.out.println( "La lista contiene "+lista.size()+" elementi!" );
Iterator<myBean> iter = lista.iterator();
while(iter.hasNext()){
myBean bean=(myBean)iter.next();
System.out.println(bean.getSomma()+" "+bean.getProvincia());
}
}
}
Da questo main viene lanciata un eccezione sull'istruzione di casting
myBean bean=(myBean)iter.next();
l'output della console di Eclipse
codice:
Hibernate: select TAX_PROV,TAX_IMPO FROM TBL_BIDOTAX
La lista contiene 7 elementi!
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to pack.myBean
at pack.prova.main(prova.java:14)
Da sottolineare che nn posto il file "hibernate.cfg.xml" in quanto effettivamente la select viene
effettuata e nelle variabili nel debug mi compare anche l'oggetto List con i 7 oggetti contenuti, esattamente contenente i valori del DB!!!
Avevo pensato a un problema legato al fatto che la tabella non contiene campi dal nome id,
oppure al fatto che effettivamente io non "riempio" mai l'attributo ID del bean.
In più ho scritto una semplice prova2.java
codice:
package pack;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class prova2 {
public static void main(String[] args) {
ArrayList<myBean> lista=new ArrayList<myBean>();
List<myBean> listina=null;
myBean bean1=new myBean(1234,"n");
myBean bean2=new myBean(2345,"na");
myBean bean3=new myBean(3456,"nap");
myBean bean4=new myBean(4567,"napo");
myBean bean5=new myBean(5678,"napol");
myBean bean6=new myBean(6789,"napoli");
lista.add(bean1);
lista.add(bean2);
lista.add(bean3);
lista.add(bean4);
lista.add(bean5);
lista.add(bean6);
System.out.println(lista.getClass());
System.out.println(lista.get(1));
listina=lista;
System.out.println(listina.getClass());
System.out.println(listina.get(1));
Iterator<myBean> it=listina.iterator();
while (it.hasNext()){
myBean bean=(myBean)it.next();
System.out.println(bean.getSomma()+" "+bean.getProvincia());
}
}
}
e tutto funziona alla grande...chi mi sa dare un aiuto???