Pour les mêmes valeurs de (REF_1_ID, PROPERTY_ID)
Vous pouvez récupérer le nombre de Propriété de l'entité avec le même (REF_1_ID, PROPERTY_ID) vous avez
Integer indexValue = (Integer)
session.createQuery("select count(*) from Property p where p.propertyId.rederenceId = :referenceId and p.propertyId.propertyId = :propertyId")
.setParameter("referenceId", referenceId)
.setParameter("propertyId", propertyId)
.iterate()
.next();
Ensuite, vous configurez
propertyId.setIndexValue(indexValue);
Vous pouvez utiliser un HibernateInterceptor pour atteindre cette fonctionnalité (Méthode onSave) Gardez à l'esprit les problèmes de concurrence lorsqu'ils traitent avec ce scénario
Ou encapsulent comme suit
@IdClass(PropertyId.class)
public class Property {
private Integer referenceId;
private Integer propertyId;
private Integer indexValue;
/**
* You can use some repository instead
*
* setUp by using Either constructor Or setter injection
*/
private Session session;
public Property() {}
public Property(Session session) {
this.session = session;
}
@Id
public Integer getIndexValue() {
if(indexValue != null)
return indexValue;
return (Integer)
session.createQuery("select count(*) from Property p where p.propertyId.rederenceId = :referenceId and p.propertyId.propertyId = :propertyId")
.setParameter("referenceId", referenceId)
.setParameter("propertyId", propertyId)
.iterate()
.next();
}
}
Juste pour la curiosité: utilisez-vous une autre entité avec cascade activé pour sauver sa imbriquée propriété d'entité ou vous sauver une simple propriété (comme save (propriété)) –
@Arthur: Je viens d'utiliser un 'save()' –