hibernate, flush ne faisant pas d'insert..
Bonjour à tous,
je suis en train de jouer un peu avec hibernate (newbie total!) et vaadin (idem) et j'ai un pb d'insertion qui... ne flush pas... un peu paumé sur cette affaire...
L'histoire :
J'execute l'affaire (serveur Glassfish), aucune exception remontée... mon objet contient les bonnes info (avec un id de setté, qui s'incremente automatiquement côté MySql (5.poussières). Seul pb aucune création côté base... le plus marrant je crée des enregistrements manuellement par la console mysql, je relance l'appli et celle-ci met correctement à jour l'id de mon objet en fonction de l'id max de la base!!!! 8O sans me créer d'enregistrement, et toujours aucune exception... :aie:, je sais que j'ai ratté un truc, mais j'arrive pas à mettre le doigt dessus... (de ce que j'ai compris pour mon mapping objet à partir du moment ou j'implémente celui-ci dans ma classe je peux me passer de l'xml de mappage, ce que je préfère cela me permet de limiter et centraliser tout ça, je me trompe???)
une idée de l'origine?, du truc qui manque, une piste... un encouragement... juste un petit signe, svp,.. :mrgreen:
Mon code :
ma classe de mapping :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
@javax.persistence.Entity
@javax.persistence.Table (name="utilisateur", schema="gameMode")
public class Utilisateur {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id")
private Integer id;
public Integer getId() {return id;}
public void setId(Integer id) {this.id = id;}
@Column(name="name")
private String name;
public String getName() {return name;}
public void setName(String name) {this.name = name;}
@Column(name="password")
private String password;
public String getPassword() {return password;}
public void setPassword(String password) {this.password = password;}
@Column(name="roleId")
private Integer roleId;
public Integer getRoleId() {return roleId;}
public void setRoleId(Integer roleId) {this.roleId = roleId;}
/* Methode de class */
public String toString(){
return "nom : "+this.name+", id : "+this.id;
}
} |
ma zone de jeu :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
final Window mainWindow = new Window("play with vaadin/hibernate");
Label label = new Label("Hi man!");
mainWindow.addComponent(label);
Ejb3Configuration cfg = new Ejb3Configuration();
EntityManagerFactory emf = cfg.configure("hibernate.cfg.xml")
.addAnnotatedClass(Utilisateur.class)
.buildEntityManagerFactory();
EntityManager em = emf.createEntityManager();
EntityTransaction tx = null;
try {
tx = em.getTransaction();
tx.begin();
} catch (Exception exc) {
if ( tx != null && tx.isActive() ) tx.rollback();
Label exception1 = new Label(exc.toString());
mainWindow.addComponent(exception1);
}
//SessionFactory sessions = cfg.buildSessionFactory();
//Session session = sessions.openSession();
Utilisateur user = new Utilisateur();
user.setName("Test");
user.setPassword("test");
user.setRoleId(0);
try{
em.persist(user);
em.flush();
//correction temporaire rendant le tout fonctionnel
//attention : non finalisé, code à considérer comme instable et non bordé
tx.commit();
em.refresh(user);
//session.beginTransaction();
//session.save(user);
//session.getTransaction().commit();
//session.flush();
//session.close();
}
catch(Exception exc){
Label exception2 = new Label(exc.toString());
mainWindow.addComponent(exception2);
}
finally{
em.close();
}
Label newUser = new Label(user.toString());
mainWindow.addComponent(newUser);
Label test = new Label("test");
mainWindow.addComponent(test);
setMainWindow(mainWindow); |
et mon hibernate.cfg.xml
Code:
1 2 3 4 5 6 7 8 9 10 11
|
<hibernate-configuration>
<session-factory name="sessionFactory">
<property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://127.0.0.1/gameMode</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.default_schema">gameMode</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
<mapping class="com.example.gameMode.Utilisateur"/>
</session-factory>
</hibernate-configuration> |
je précise : pas de mot de passe à mon root mysql, j'suis comme ça! à la cool! :D