Saya pikir apa yang Anda cari dijelaskan dalam Hibernasi bagian ORM tentang @Any
anotasi
:
@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
Tapi itu tidak akan membuat kunci asing. Saya bahkan tidak berpikir mungkin untuk membuat dua kunci asing pada kolom yang sama untuk tabel yang berbeda (apakah itu masuk akal?).
Atau, jika kedua kelas dapat diperluas dari kelas super umum, Anda dapat menggunakan Pemetaan warisan untuk mencapai sesuatu yang serupa.
Misalnya:
@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 {
...
}
lalu
@ManyToOne
@JoinColumn(name="assignedto_id", referencedColumnName="id", insertable=false, updatable=false)
private UserEntity assignedto;
Ini akan membuat tiga tabel sekalipun. Tabel UserEntity
akan memiliki kunci asing pada assignedto_id
kolom. User
id dan LDAPUser
id akan memiliki batasan masing-masing pada UserEntity
Indo. Pada dasarnya, mendekati apa yang Anda minta pada awalnya.