J'ai quelques enregistrements supprimés logiquement (ie active=false
) qui causent des problèmes avec ma correspondance @ManyToOne
car plus d'un résultat est renvoyé par la colonne de jointure.ManyToOne avec la clause where
je dois inclure uniquement les enregistrements où active=true
que je pensais que je pouvais réaliser par:
@ManyToOne
@NotFound(action = NotFoundAction.IGNORE)
@JoinColumn(name = "site_id", referencedColumnName = "site_id", insertable = false, updatable = false)
@WhereJoinTable(clause = "active=true")
private Site site;
Cependant, il semble que le WhereJoinTable
n'est pas utilisé par mise en veille prolongée (peut-être sa seule valable pour OneToMany
?) Depuis le active=true
n'apparaît pas dans le SQL généré (journaux) et le problème persiste.
Est-il possible d'inclure une clause where pour la jointure d'un ManyToOne
et comment?
est-il possible de re-mapper la même table et mettre un filtre sur la cartographie, à savoir si j'ai une lecture seule entité 'ActiveSite'? – pstanton
Oui, vous pouvez le faire. Mais comme la connexion attendue entre les instances d'ActiveSite et Site est alors inconnue à Hibernate. Ainsi, les modifications apportées au site correspondant ne sont reflétées dans ActiveSite que lorsqu'elles sont lues (ou actualisées) à partir de la base de données. –
Oui, ce serait acceptable dans ce cas, mais j'essaie d'utiliser '@Where (clause =" active = true ")' sur mon '@ Entity' et Hibernate le convertit en' site0_.active = site0_. true' .. si vous pouvez m'aider à résoudre celui-ci je vais vous donner la tique (puisque vous avez raison dans votre réponse ..) merci pour l'aide! – pstanton