Penso che quello che stai cercando sia spiegato in Sezione ORM in sospensione relativa a @Any
annotazione
:
@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
Ma non creerà chiavi esterne. Non credo nemmeno sia possibile creare due chiavi esterne sulla stessa colonna per tabelle diverse (ha senso?).
In alternativa, se le due classi potessero estendersi da una superclasse comune, potresti usare Mappatura dell'ereditarietà per ottenere qualcosa di simile.
Ad esempio:
@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 {
...
}
e poi
@ManyToOne
@JoinColumn(name="assignedto_id", referencedColumnName="id", insertable=false, updatable=false)
private UserEntity assignedto;
Questo creerà tre tabelle però. La tabella UserEntity
avrà una chiave esterna su assignedto_id
colonna. User
id e LDAPUser
id avrà un vincolo ciascuno su UserEntity
id. In sostanza, avvicinarsi a ciò che avevi chiesto all'inizio.