Bonjour !

Je réalise actuellement une petite application JEE avec Hibernate, histoire de me familiariser avec ce dernier ... et apparemment c'est pas gagné

J'ai donc 2 classes/tables : une classe User, avec une adresse mail comme identifiant, et quelques autres propriétés, et une classe Ticket, avec un identifiant 'classique' entier, quelques propriétés et ... 2 Users (un vendeur -seller- et un acheteur -buyer-). Le problème arrive lorsque je veux sauvegarder un Ticket, avec un vendeur défini, dont je récupère l'adresse mail (son identifiant donc) dans ma session http (l'acheteur est à null) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
WARN [JDBCExceptionReporter:100] SQL Error: 1062, SQLState: 23000
ERROR [JDBCExceptionReporter:101] Duplicate entry 'toto@nullmail.com' for key 'PRIMARY'
ERROR [AbstractFlushingEventListener:324] Could not synchronize database state with session
Et en effet, quand je regarde les requêtes, j'ai bien une nouvelle insertion d'un User, et c'est ça que je ne comprend pas, et que je n'arrive pas à résoudre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Hibernate: 
    insert 
    into
        TICKET
        (DEPARTURECITY, ARRIVALCITY, DEPARTUREDATE, ARRIVALDATE, INITIALPRICE, FINALPRICE, VALIDITY, SELLER, BUYER, ISSOLD, PUBLISHDATE) 
    values
        (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: 
    insert 
    into
        USER
        (FIRSTNAME, LASTNAME, PASSWORD, EMAIL) 
    values
        (?, ?, ?, ?)
Et voici un 'résumé' (la partie qui nous intéresse quoi) de ma servlet utilisée pour écrire cette classe en base :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
Ticket newTicket = new Ticket();
HttpSession session = request.getSession();
HibernateUser hu = new HibernateUser();
Object userEmail = session.getAttribute("userEmail");
newTicket.setSeller(hu.getByEmail(userEmail.toString()));
HibernateTicket ht = new HibernateTicket();
ht.save(newTicket);
Ma fonction save() de HibernateTicket :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public void save(Ticket ticket) {
		Session session = HibernateUtil.getSessionFactory().openSession();
		Transaction transaction = null;
		try {
			transaction = session.beginTransaction();
			//session.merge(ticket.getSeller());
			session.persist(ticket);
			transaction.commit();
		} catch (HibernateException he) {
			he.printStackTrace();
			if(transaction != null) {
				try { transaction.rollback(); } catch(HibernateException he2) {
				he2.printStackTrace(); }
			}
		}
		finally {
			if(session != null) {
				try { session.close(); } catch(HibernateException he) {
				he.printStackTrace(); }
			}
		}
	}
Et le contenu de mon fichier Ticket.hbm.xml :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<hibernate-mapping>	
	<class name="model.Ticket" table="TICKET">
		<id name="id" column="ID">
			<generator class="identity">
			</generator>
		</id>
		<property name="departureCity" column="DEPARTURECITY"/>
		<property name="arrivalCity" column="ARRIVALCITY"/>
		<property name="departureDate" column="DEPARTUREDATE"/>
		<property name="arrivalDate" column="ARRIVALDATE"/>
		<property name="initialPrice" column="INITIALPRICE"/>
		<property name="finalPrice" column="FINALPRICE"/>
		<property name="validity" column="VALIDITY"/>
		<many-to-one name="seller" class="model.User" column="SELLER" cascade="all"/>
		<many-to-one name="buyer" class="model.User" column="BUYER" cascade="all"/>
		<property name="isSold" column="ISSOLD"/>
		<property name="publishDate" column="PUBLISHDATE"/>
	</class>
</hibernate-mapping>
Voilà, j'espère que j'ai mis tous les éléments nécessaires à la compréhension de mon problème, n'hésitez pas à me signaler s'il manque quelque chose, et si une âme charitable pourrait m'aider avec tout ça, je lui en serait infiniment reconnaissant !

Merci d'avance !