मुझे लगता है कि आप जो खोज रहे हैं वह ORM अनुभाग को @Any
. के बारे में हाइबरनेट करें एनोटेशन
:
@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
लेकिन यह कोई विदेशी कुंजी नहीं बनाएगा। मुझे नहीं लगता कि अलग-अलग तालिकाओं के लिए एक ही कॉलम पर दो विदेशी कुंजी बनाना संभव है (क्या इसका कोई मतलब है?)।
वैकल्पिक रूप से, यदि दो वर्ग एक सामान्य सुपर क्लास से विस्तारित हो सकते हैं, तो आप विरासत मानचित्रण कुछ ऐसा ही हासिल करने के लिए।
उदाहरण के लिए:
@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;
हालांकि यह तीन टेबल बनाएगा। तालिका UserEntity
assignedto_id
. पर एक विदेशी कुंजी होगी कॉलम। User
आईडी और LDAPUser
आईडी में प्रत्येक UserEntity
. पर एक बाधा होगी पहचान। मूल रूप से, जो आपने मूल रूप से पूछा था उसके करीब पहुंचना।