Jeg tror, hvad du leder efter, er forklaret i Dvale ORM-sektion om @Any anmærkning
:
@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
Men det vil ikke skabe nogen fremmednøgler. Jeg tror ikke engang, det er muligt at oprette to fremmednøgler på samme kolonne til forskellige tabeller (giver det overhovedet mening?).
Alternativt, hvis de to klasser kunne strække sig fra en fælles superklasse, kunne du bruge Tilknytning af arv at opnå noget lignende.
For eksempel:
@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 {
...
}
og derefter
@ManyToOne
@JoinColumn(name="assignedto_id", referencedColumnName="id", insertable=false, updatable=false)
private UserEntity assignedto;
Dette vil dog oprette tre tabeller. Tabellen UserEntity vil have en fremmednøgle på assignedto_id kolonne. User id og LDAPUser id vil have en begrænsning hver på UserEntity id. Dybest set at komme tæt på det, du oprindeligt bad om.