2009-11-08 5 views
1

J'essaie de créer de nouveaux objets Event à conserver dans la base de données via Hibernate. Le code ci-dessous crée avec succès un événement, mais lorsque session.save (evt) est appelée, j'obtiens une valeur de retour de 0 (qui, je pense, est l'équivalent de null). Quelqu'un peut-il identifier ce que le problème est ci-dessous? Si vous avez besoin de plus d'informations concernant les classes ou les fichiers de mapping hibernate impliqués, veuillez demander ce dont vous avez besoin.Hibernate: objets persistants

Remarque: Supposons qu'une table d'événements existe dans la base de données.

public class ScheduleUnitOfWork { 
private Map<Service, Employee> assignments; 
private Date startDate; 
private Date endDate; 
private String customerName; 

public ScheduleUnitOfWork(Map<Service, Employee> assignments, Date startDate, 
          Date endDate, String customerName) { 
    super(); 

    this.assignments = assignments; 
    this.startDate = startDate; 
    this.endDate = endDate; 
    this.customerName = customerName; 
} 

public boolean scheduleEmployees(){ 
    Session session = SessionFactoryUtil.getInstance().getCurrentSession(); 
    Transaction tx = null; 
    boolean retVal = true; 

    try { 
     tx = session.beginTransaction(); 

     for(Service s : assignments.keySet()){ 
      Employee e = assignments.get(s); 

      Event evt = new Event(); 
      evt.setAssignedService(s); 
      evt.setCustomerName(this.customerName); 
      evt.setEndDate(endDate); 
      evt.setStartDate(startDate); 

      System.out.println(session.save(evt)); 
     } 

     tx.commit(); 

    }catch(RuntimeException ex){ 
     ex.printStackTrace(); 

     if(tx != null){ 
      tx.rollback(); 
     } 
     session.close(); 

     retVal = false; 
    } 

    return retVal; 
} 

}

<class name="Event" table="Events"> 
    <id name="ID" column="ID" type="int"> 
     <generator class="assigned"/> 
    </id> 
    <property name="startDate" column="startDate" type="timestamp"/> 
    <property name="endDate" column="endDate" type="timestamp"/> 
    <property name="customerName" column="customerName" type="string"/> 
    <many-to-one name="assignedService" column="serviceID" 
       class="org.hibernate.service.Service" 
       unique="true" not-null="true"/> 

</class> 

+0

Voir un mappage pour Event aiderait (.hbm.xml ou classe annotée). Avez-vous spécifié un générateur pour son identifiant? – ChssPly76

+0

J'ai ajouté la définition de classe dans le fichier hibernate à la question ci-dessus. – jds2501

Répondre

2

Votre classe de générateur est "attribué" signifie Hibernate prendra l'ID "tel quel" - par exemple il supposera vous le définissez.

Jetez un oeil à various generator classes pris en charge par Hibernate. Si vous voulez que votre ID soit généré automatiquement, les approches les plus courantes sont «identité» (si votre base de données le prend en charge) ou «séquence».

+0

J'ai changé la classe de générateur pour être l'identité et je vois sauver sauver une valeur non-nulle qui s'incrémente. Cependant, je ne vois toujours pas la mise à jour de la table de la base de données. J'ai essayé de vider le tampon de session, mais cela n'a pas fonctionné. Des idées? – jds2501

+0

Si vous récupérez un identifiant de "identité", cela signifie que la ligne ** a été insérée mais que la transaction a été annulée par la suite. Recevez-vous des erreurs lorsque vous effectuez la transaction par hasard? – ChssPly76

+0

Trouvé l'erreur: Dans le navigateur de requête MySQL que j'utilisais, j'ai un peu oublié de rafraîchir ma vue du navigateur. Les événements sont maintenant ajoutés, merci! – jds2501

Questions connexes