Je pense que ce que vous recherchez est expliqué dans le Section ORM Hibernate à propos de @Any
annotation
:
@Any(metaColumn = @Column(name = "userType"))
@AnyMetaDef(name = "PropertyMetaDef", metaType = "string", idType = "long",
metaValues = {
@MetaValue(value = "User", targetEntity = User.class),
@MetaValue(value = "LDAP", targetEntity = LDAPUser.class)
}
)
@JoinColumn(name="assignedto_id", referencedColumnName="id", insertable=false, updatable=false)
private Object assignedTo
Mais cela ne créera aucune clé étrangère. Je ne pense même pas qu'il soit possible de créer deux clés étrangères sur la même colonne pour différentes tables (est-ce que cela a du sens ?).
Alternativement, si les deux classes peuvent s'étendre à partir d'une super classe commune, vous pouvez utiliser Mappage d'héritage pour réaliser quelque chose de similaire.
Par exemple :
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public static class UserEntity {
@Id
private Long id;
...
}
@Entity
public class User extends UserEntity {
...
}
@Entity
public class LDAPUser extends UserEntity {
...
}
puis
@ManyToOne
@JoinColumn(name="assignedto_id", referencedColumnName="id", insertable=false, updatable=false)
private UserEntity assignedto;
Cela créera cependant trois tables. La table UserEntity
aura une clé étrangère sur le assignedto_id
colonne. User
identifiant et LDAPUser
id aura une contrainte chacun sur UserEntity
identifiant. Fondamentalement, se rapprocher de ce que vous avez demandé à l'origine.