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.