carter100
30-05-2009, 20:09
Ciao, sto vedendomi hibernate e son agli inizi. Ho visto come leggere dati da un db, son passato all'inserimento e ho trovato problemi. Vi posto i file xml e le classi:
File Dipartimento.java (classe da inserire nel database)
package it.demo.dominio;
public class Dipartimento {
private int id;
private String nome;
private String sede;
public Dipartimento() {
}
public Dipartimento(String nome,String sede) {
this.nome=nome;
this.sede=sede;
}
public int getId() {
return id;
}
private void setId(int id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getSede() {
return sede;
}
public void setSede(String sede) {
this.sede = sede;
}
}
File Main.Java (per fare l'inserimento)
package it.demo.dominio;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.tutorial.util.HibernateUtil;
public class Main
{
/**Crea un Dipartimento dati nome e sede e lo salva nel database
*/
public static Dipartimento creaDipartimento(String nome,String sede) {
Dipartimento d=new Dipartimento(nome,sede);
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
//Chiedo al middleware di salvare questo oggetto nel database
session.save(d);
//fine della transazione: salviamo tramite commit()
session.getTransaction().commit();
}
catch (HibernateException he) {
if (tx!=null)
tx.rollback();
throw he;
}
finally {
session.close();
}
return d;
}
public static void main (String [] args)
{
Main.creaDipartimento("nome324", "sede121");
}
}
Posto anche i 2 file xml:
Dipartimento.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping schema="miodatabase" package="it.demo.dominio">
<class name="Dipartimento" table="dipartimento" lazy="false">
<id name="id" column="id_dipartimento">
<generator class="native"/>
</id>
<property name="nome"/>
<property name="sede"/>
</class>
</hibernate-mapping>
hibernate.cfg.xml
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- Database connection settings -->
<property
name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://127.0.0.1:3306/miodatabase</property>
<property name="connection.username">root</property>
<property name="connection.password">pass</property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">2</property>
<!-- SQL dialect -->
<property
name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>
<!-- Disable the second-level cache -->
<property
name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">false</property>
<mapping resource="it/demo/dominio/Dipartimento.hbm.xml"/>
</session-factory>
</hibernate-configuration>
Eseguo e ho la tupla inserita nel db. Ma ho anche 1 errore:
Exception in thread "main" org.hibernate.HibernateException: The database returned no natively generated identity value
Java result 1.
Il rigo incriminato è session.save(d) in Main,java.
Mi sapete dare 1 suggerimento per capire da che dipende?Sto uscendo pazzo, grazie :)
File Dipartimento.java (classe da inserire nel database)
package it.demo.dominio;
public class Dipartimento {
private int id;
private String nome;
private String sede;
public Dipartimento() {
}
public Dipartimento(String nome,String sede) {
this.nome=nome;
this.sede=sede;
}
public int getId() {
return id;
}
private void setId(int id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getSede() {
return sede;
}
public void setSede(String sede) {
this.sede = sede;
}
}
File Main.Java (per fare l'inserimento)
package it.demo.dominio;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.tutorial.util.HibernateUtil;
public class Main
{
/**Crea un Dipartimento dati nome e sede e lo salva nel database
*/
public static Dipartimento creaDipartimento(String nome,String sede) {
Dipartimento d=new Dipartimento(nome,sede);
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
//Chiedo al middleware di salvare questo oggetto nel database
session.save(d);
//fine della transazione: salviamo tramite commit()
session.getTransaction().commit();
}
catch (HibernateException he) {
if (tx!=null)
tx.rollback();
throw he;
}
finally {
session.close();
}
return d;
}
public static void main (String [] args)
{
Main.creaDipartimento("nome324", "sede121");
}
}
Posto anche i 2 file xml:
Dipartimento.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping schema="miodatabase" package="it.demo.dominio">
<class name="Dipartimento" table="dipartimento" lazy="false">
<id name="id" column="id_dipartimento">
<generator class="native"/>
</id>
<property name="nome"/>
<property name="sede"/>
</class>
</hibernate-mapping>
hibernate.cfg.xml
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- Database connection settings -->
<property
name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://127.0.0.1:3306/miodatabase</property>
<property name="connection.username">root</property>
<property name="connection.password">pass</property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">2</property>
<!-- SQL dialect -->
<property
name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>
<!-- Disable the second-level cache -->
<property
name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">false</property>
<mapping resource="it/demo/dominio/Dipartimento.hbm.xml"/>
</session-factory>
</hibernate-configuration>
Eseguo e ho la tupla inserita nel db. Ma ho anche 1 errore:
Exception in thread "main" org.hibernate.HibernateException: The database returned no natively generated identity value
Java result 1.
Il rigo incriminato è session.save(d) in Main,java.
Mi sapete dare 1 suggerimento per capire da che dipende?Sto uscendo pazzo, grazie :)