2011-08-03 4 views
0

J'ai une classe dans laquelle je persiste avec Hibernate. Il est stocké dans un sac et utilise un générateur de séquence pour générer son ID, comme ci-dessous:INSERT au lieu de UPDATE avec Hibernate

<class name="Parent"> 
    <id name="id" /> 
    <bag name="children" access="field"> 
    <key column="parent_id" not-null="true" /> 
    <one-to-many class="Child" /> 
    </bag> 
</class> 

<class name="Child"> 
    <id name="id"> 
    <generator class="sequence"> 
     <param name="sequence">child_seq</param> 
    </generator> 
    </id> 

    <many-to-one name="status" not-null="true" cascade="none" /> 
</class> 

Lorsque la propriété d'état de l'enfant est modifié, devrait être Inséré au lieu de l'ancien mis à jour un nouveau record de l'enfant. Cependant, Hibernate UPDATEs. Y a-t-il un moyen de dire à Hibernate qu'il devrait être INSERT, ou dois-je le gérer moi-même en dehors du sac?

+1

Il semble que la façon dont vous utilisez Hibernate soit confuse. Vous voulez 'Parent.children.size()' être différent du nombre de lignes dans la table? Pourquoi ne pas simplement ajouter une nouvelle instance Child au sac? –

Répondre

0

Je crois que vous devez ajouter manuellement un objet enfant à la collection. Parce qu'avec hibernate, il est normal que chaque entité soit liée à une ligne dans une table. Pour ajouter une nouvelle ligne, vous devez ajouter un nouvel enfant à la collection.