Myslím, že to, co hledáte, je vysvětleno v Hibernace sekce ORM o @Any
anotace
:
@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 nevytvoří žádné cizí klíče. Dokonce si nemyslím, že je možné vytvořit dva cizí klíče ve stejném sloupci pro různé tabulky (má to vůbec smysl?
Případně, pokud by se dvě třídy mohly rozšířit ze společné supertřídy, můžete použít Mapování dědičnosti dosáhnout něčeho podobného.
Například:
@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 poté
@ManyToOne
@JoinColumn(name="assignedto_id", referencedColumnName="id", insertable=false, updatable=false)
private UserEntity assignedto;
Tím však vytvoříte tři tabulky. Tabulka UserEntity
bude mít cizí klíč na assignedto_id
sloupec. User
id a LDAPUser
id bude mít každé omezení na UserEntity
id. V podstatě se přiblížíte tomu, na co jste se původně ptali.