Ciao a tutti,

In Eclipse sto muovendo i primissimi passi con Hibernate e PosgreSQL 8.4.
Ho scaricato il driver postgresql-8.4-702.jdbc4.jar che ho inserito in una cartella "lib" insieme a tutti gli altri JAR di Hibernate a cui faccio riferimento.
Ho creato poi una classe "Libro", semplicissima:

public class Libro {

private String titolo, autore;
private Long id;

public Libro() {
}

public Long getId() {
return id;
}

private void setId(Long id) {
this.id = id;
}

public String getTitolo() {
return titolo;
}

public void setTitolo(String titolo) {
this.titolo = titolo;
}


public String getAutore() {
return autore;
}

public void setAutore(String autore) {
this.autore = autore;
}
}


a cui corrisponde una tabella Postgres chiamata "libri" all'interno del database "mydb" e così definita:

CREATE TABLE libri
(
id serial NOT NULL,
titolo text,
autore text,
CONSTRAINT pkey1 PRIMARY KEY (id)
)
WITH (
OIDS=FALSE
);
ALTER TABLE libri OWNER TO marco;

Ho poi creato il file Libro.hbm.xml:

<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="Libro" table="libri">
<id name="id" column="id">
<generator class="native"/>
</id>
<property name="titolo"/>
<property name="autore"/>
</class>
</hibernate-mapping>

ed il file Hibernate.cfg.xml:

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
<session-factory>

<property name="connection.driver_class">org.postgresql.Driv er</property>
<property name="connection.url">jdbcostgresql://localhost/mydb</property>
<property name="connection.username">marco</property>
<property name="connection.password">miapassword</property>

<property name="connection.pool_size">1</property>

<property name="current_session_context_class">thread</property>

<property name="dialect">org.hibernate.dialect.PostgreSQLDia lect</property>

<property name="show_sql">true</property>

<property name="hbm2ddl.auto">create</property>
<mapping resource="Libro.hbm.xml"/>
</session-factory>
</hibernate-configuration>

infine ho scritto la classe per testare il salvataggio in tabella di un nuovo libro:

import org.hibernate.*;
import org.hibernate.cfg.*;

public class HibernateExample {

public HibernateExample() {
}

public static void main(String a[]) {
Session session = null;
try{
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
session = sessionFactory.openSession();
session.beginTransaction();
Libro libro = new Libro();
libro.setTitolo("Bel titolo");
libro.setAutore("Marco");
session.persist(libro);
}catch(Exception e){
System.out.println(e.getMessage());
}finally{
session.getTransaction().commit();
session.close();

}
}
}

Ora succede che questo codice non si limita a creare un nuovo libro in tabella, ma cancella tutti quelli eventualmente già presenti.
Inoltre andando a rivedere la definizione della tabella, la trovo alterata:

CREATE TABLE libri
(
id bigint NOT NULL,
titolo character varying(255),
autore character varying(255),
CONSTRAINT libri_pkey PRIMARY KEY (id)
)
WITH (
OIDS=FALSE
);
ALTER TABLE libri OWNER TO marco;

l'id che avevo definito come 'serial' è diventato un bigint. Titolo e autore erano di tipo 'text' e ora sono character varying(255).
Trovo anche una sequenza nuova, evidentamente creata da Hibernate, così definita:

CREATE SEQUENCE hibernate_sequence
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 1
CACHE 1;
ALTER TABLE hibernate_sequence OWNER TO marco;


Mi aiutate a capire cosa sto sbagliando?

Grazie,

Marco