あなたが探しているものは、 @Any
に関するHibernateORMセクション 注釈
:
@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
ただし、外部キーは作成されません。異なるテーブルの同じ列に2つの外部キーを作成することは不可能だと思います(意味がありますか?)。
または、2つのクラスが共通のスーパークラスから拡張できる場合は、継承マッピング 同様のことを達成するために。
例:
@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 {
...
}
そして
@ManyToOne
@JoinColumn(name="assignedto_id", referencedColumnName="id", insertable=false, updatable=false)
private UserEntity assignedto;
ただし、これにより3つのテーブルが作成されます。テーブルUserEntity
assignedto_id
に外部キーがあります 桁。 User
idとLDAPUser
idには、UserEntity
ごとに制約があります id。基本的に、最初に尋ねたものに近づきます。