Creo que lo que está buscando se explica en Sección ORM de Hibernate sobre @Any
anotación
:
@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
Pero no creará ninguna clave externa. Ni siquiera creo que sea posible crear dos claves externas en la misma columna para diferentes tablas (¿tiene sentido?).
Alternativamente, si las dos clases pudieran extenderse desde una súper clase común, podría usar Asignación de herencia para lograr algo similar.
Por ejemplo:
@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 {
...
}
y luego
@ManyToOne
@JoinColumn(name="assignedto_id", referencedColumnName="id", insertable=false, updatable=false)
private UserEntity assignedto;
Sin embargo, esto creará tres tablas. La tabla UserEntity
tendrá una clave externa en el assignedto_id
columna. User
id y LDAPUser
id tendrá una restricción cada uno en UserEntity
identificación. Básicamente, acercarte a lo que pediste originalmente.