Jag tror att det du letar efter förklaras i Hibernate ORM-avsnittet om @Any
anteckning
:
@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 kommer inte att skapa några främmande nycklar. Jag tror inte ens är möjligt att skapa två främmande nycklar på samma kolumn för olika tabeller (är det ens vettigt?).
Alternativt, om de två klasserna kan sträcka sig från en gemensam superklass, kan du använda Arvsmappning för att uppnå något liknande.
Till exempel:
@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 {
...
}
och sedan
@ManyToOne
@JoinColumn(name="assignedto_id", referencedColumnName="id", insertable=false, updatable=false)
private UserEntity assignedto;
Detta kommer dock att skapa tre tabeller. Tabellen UserEntity
kommer att ha en främmande nyckel på assignedto_id
kolumn. User
id och LDAPUser
id kommer att ha en begränsning på UserEntity
id. I grund och botten, att komma nära det du frågade från början.