Ik denk dat wat je zoekt wordt uitgelegd in de Overwinteren ORM-sectie over @Any
annotatie
:
@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
Maar er worden geen externe sleutels gemaakt. Ik denk niet eens dat het mogelijk is om twee externe sleutels op dezelfde kolom te maken voor verschillende tabellen (heeft het zelfs zin?).
Als alternatief, als de twee klassen zich zouden kunnen uitbreiden van een gemeenschappelijke superklasse, kunt u Overervingstoewijzing om iets soortgelijks te bereiken.
Bijvoorbeeld:
@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 {
...
}
en dan
@ManyToOne
@JoinColumn(name="assignedto_id", referencedColumnName="id", insertable=false, updatable=false)
private UserEntity assignedto;
Dit zal echter drie tabellen maken. De tabel UserEntity
heeft een externe sleutel op de assignedto_id
kolom. User
id en LDAPUser
id heeft elk een beperking op UserEntity
ID kaart. Kortom, in de buurt komen van wat je oorspronkelijk vroeg.