2008-11-26 8 views
0

J'ai créé un UserObject et un RoleObject pour représenter les utilisateurs dans mon application. J'essaie d'utiliser hibernate pour CRUD au lieu de JDBC brut. J'ai récupéré avec succès les informations de la base de données, mais je ne peux pas créer de nouveaux utilisateurs. Je reçois l'erreur suivante.Utilisateurs persistants utilisant Hibernate

org.springframework.web.util.NestedServletException: Request processing failed; nested 
exception is org.springframework.dao.DataIntegrityViolationException: could not insert: 
[com.dc.data.UserRole]; nested exception is 
org.hibernate.exception.ConstraintViolationException: could not insert: 
[com.dc.data.UserRole] 

base de données Mon est défini comme suit:

utilisateurs Table, autorité Table et les autorités. La table des autorités est une jointure des utilisateurs et des autorités.

Ma cartographie mise en veille prolongée pour UserObjec est comme suit:

... 
    <set name="roles" table="authorities" cascade="save-update" lazy="false" > 
      <key column="userId" /> 
      <one-to-many class="com.dc.data.UserRole"/> 
      <many-to-many class="com.dc.data.UserRole" column="authId" /> 
     </set> 
    </class> 
    ... 

UserRole est mis en correspondance comme suit:

<class name="com.dc.data.UserRole" table="authority"> 
    <id name="id" column="authId"> 
     <generator class="native" /> 
    </id> 
    <property name="roleName"> 
     <column name="authority" length="60" not-null="true" /> 
    </property> 
</class> 

Comment dois-je modifier ma cartographie ou la structure d'objets pour pouvoir persister nouvelle utilisateurs?

Répondre

2

Vous définissez deux relations différentes à l'intérieur de votre élément "set". Ce que vous voulez probablement, c'est juste l'élément many-to-many.

Si cela ne fonctionne toujours pas, essayez d'enregistrer le UserRole lui-même pour voir si vous pouvez le conserver seul. Si vous le pouvez, l'exception ConstraintViolationException est lancée tout en essayant de conserver l'utilisateur. Dernier conseil, vous ne voulez probablement pas mettre en cascade sauvegarder/mettre à jour sur le jeu de "rôles". Selon toute probabilité, vos UserRoles seront déjà dans la base de données et seront simplement attachés aux utilisateurs à mesure qu'ils sont créés.

+0

Cela a résolument résolu le problème. Merci! – IaCoder

+0

Aurait été bien si vous auriez pu marquer ma réponse comme la bonne. :) –

+0

Merci de marquer correctement. :) –

0

La violation de contrainte sur UserRole peut être une cause de tentative d'insertion d'une ligne avec une clé en double. Peut-être expérimenter avec l'utilisation d'autres types de générateurs, tels que "séquence".