Мисля, че това, което търсите, е обяснено в Hibernate ORM раздел за @Any
анотация
:
@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
Но няма да създаде никакви външни ключове. Дори не мисля, че е възможно да се създадат два външни ключа в една и съща колона за различни таблици (има ли изобщо смисъл?).
Като алтернатива, ако двата класа могат да се разширят от общ супер клас, можете да използвате Съпоставяне на наследяване за да постигнете нещо подобно.
Например:
@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 {
...
}
и след това
@ManyToOne
@JoinColumn(name="assignedto_id", referencedColumnName="id", insertable=false, updatable=false)
private UserEntity assignedto;
Това обаче ще създаде три таблици. Таблицата UserEntity
ще има външен ключ на assignedto_id
колона. User
id и LDAPUser
id ще има ограничение за всеки от UserEntity
документ за самоличност. По принцип, доближаване до това, което поискахте първоначално.