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.