Ich denke, wonach Sie suchen, wird im Ruhezustand-ORM-Abschnitt über @Any
Anmerkung
:
@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
Aber es werden keine Fremdschlüssel erstellt. Ich glaube nicht einmal, dass es möglich ist, zwei Fremdschlüssel in derselben Spalte für verschiedene Tabellen zu erstellen (macht das überhaupt Sinn?).
Wenn die beiden Klassen aus einer gemeinsamen Superklasse hervorgehen könnten, könnten Sie alternativ Vererbungszuordnung um etwas Ähnliches zu erreichen.
Zum Beispiel:
@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 {
...
}
und dann
@ManyToOne
@JoinColumn(name="assignedto_id", referencedColumnName="id", insertable=false, updatable=false)
private UserEntity assignedto;
Dadurch werden jedoch drei Tabellen erstellt. Die Tabelle UserEntity
wird einen Fremdschlüssel auf assignedto_id
haben Säule. User
id und LDAPUser
id hat jeweils eine Einschränkung für UserEntity
Ich würde. Im Grunde nähern Sie sich dem, was Sie ursprünglich gefragt haben.