Myślę, że to, czego szukasz, jest wyjaśnione w Hibernuj sekcję ORM dotyczącą @Any
adnotacja
:
@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
Ale nie utworzy żadnych kluczy obcych. Nie sądzę nawet, aby możliwe było utworzenie dwóch kluczy obcych w tej samej kolumnie dla różnych tabel (czy to ma sens?).
Alternatywnie, jeśli te dwie klasy mogłyby wywodzić się ze wspólnej superklasy, możesz użyć Mapowanie dziedziczenia osiągnąć coś podobnego.
Na przykład:
@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 {
...
}
a potem
@ManyToOne
@JoinColumn(name="assignedto_id", referencedColumnName="id", insertable=false, updatable=false)
private UserEntity assignedto;
Utworzy to jednak trzy tabele. Tabela UserEntity
będzie miał klucz obcy w assignedto_id
kolumna. User
id i LDAPUser
id będzie miał ograniczenie dla każdego UserEntity
ID. Zasadniczo zbliżasz się do tego, o co prosiłeś.