est-il nécessaire que l'identifiant de composite soit mappé en classe ??
peut-il être comme ça? p> ou doit être p> <composite-id class=....>
<key-property=..../>
<key-property=..../>
</composite-id>
3 Réponses :
Hibernate doit être capable de comparer et de sérialiser les identificateurs. Donc, la classe d'identifiant doit être sérialisable et la remplacement du hashcode () et est égale () de manière cohérente avec la notion de la base de données d'égalité clé composite.
Si vous avez un identifiant composite mappé comme propriétés de l'entité, l'entité elle-même est l'identifiant. p>
Une deuxième approche s'appelle un identifiant composite mappé, où les propriétés d'identification nommées à l'intérieur de la Enfin, un ID composite peut être une classe de composite. Dans ce cas, la classe des composants est la classe d'identifiant. P> Notez qu'il est fortement recommandé d'avoir l'ID une classe distincte. Sinon, vous aurez seulement des moyens très maladroits de rechercher votre objet à l'aide de session.get () ou de session.load (). P> sections pertinentes de la documentation de référence: p> Dans cet exemple, un ID composite est mappé comme propriétés de l'entité. (Les suivants supposent que vous définissez la classe d'employé). P>
<composite-id name="Id" class="EmployeeAssignmentId">
<key-property name="EmployeeNumber"/>
<key-property name="Dependent"/>
</composite-id>
class EmployeeAssignment
{
EmployeeAssignmentId getId()
void setId( EmployeeAssignmentId value )
}
class EmployeeAssignmentId implements Serializable
{
string getEmployeeNumber()
void setEmployeeNumber( string value )
string getDepartment()
void setDepartment( string value )
boolean equals( Object obj )
int hashCode()
}
exemple déroutant. En outre, qu'est-ce qui est "dépendant" dans l'ID composite? Voulez-vous dire «département»? de toute façon, toujours un exemple déroutant. pourrait être clarifié en ayant des commentaires pour l'expliquer.
Si vous laissez l'entité elle-même être l'identifiant, cela signifie-t-il que les égaux et le hashcode ne peuvent utiliser que les identifiants composites et les autres champs pour vérifier l'égalité?
Les deux sont possibles. Si vous utilisez
<composite-id name="id" class="OrderLineId"> <key-property name="lineId"/> <key-property name="orderId"/> <key-property name="customerId"/> </composite-id>
"Si vous utilisez" ... Voulez-vous mettre du code après cette ligne?
404 sur votre lien DOC.
Si vous avez une clé composite contenant des relations avec d'autres entités, faites-le comme suit:
<composite-id> <key-many-to-one name="employee" column="FK_EMPLOYEE" entity-name="net.package.name.Employee" /> <key-many-to-one name="department" column="FK_DEPARTMENT" entity-name="net.package.name.Department" /> </composite-id>
Malheureusement, cela ne fonctionne pas, une exception de mappage est lancée: colonne répétée dans la cartographie pour l'entité i>.