मैं जेपीए/हाइबरनेट का उपयोग कर निम्न तालिकाओं स्थापित करने के लिए कोशिश कर रहा हूँ प्राथमिक:OneToOne साझा कुंजी
User:
userid - PK
name
Validation:
userid - PK, FK(user)
code
कई उपयोगकर्ताओं हो सकता है और प्रत्येक उपयोगकर्ता के अधिकतम एक सत्यापन कोड या बिल्कुल भी नहीं हो सकता है।
यहाँ मेरी वर्गों है:
public class User
{
@Id
@Column(name = "userid")
@GeneratedValue(strategy = GenerationType.IDENTITY)
protected Long userId;
@Column(name = "name", length = 50, unique = true, nullable = false)
protected String name;
...
}
public class Validation
{
@Id
@Column(name = "userid")
protected Long userId;
@OneToOne(cascade = CascadeType.ALL)
@PrimaryKeyJoinColumn(name = "userid", referencedColumnName = "userid")
protected User user;
@Column(name = "code", length = 10, unique = true, nullable = false)
protected String code;
...
public void setUser(User user)
{
this.user = user;
this.userId = user.getUserId();
}
...
}
मैं एक उपयोगकर्ता बना सकते हैं और उसके बाद निम्न कोड का उपयोग कर एक सत्यापन कोड को जोड़ने का प्रयास:
public void addValidationCode(Long userId)
{
EntityManager em = createEntityManager();
EntityTransaction tx = em.getTransaction();
try
{
tx.begin();
// Fetch the user
User user = retrieveUserByID(userId);
Validation validation = new Validation();
validation.setUser(user);
em.persist(validation);
tx.commit();
}
...
}
जब मैं इसे चलाने के लिए मैं एक ऑर्ग पाने का प्रयास करें। hibernate.PersistentObjectException: पृथक इकाई को जारी रखने के लिए पारित किया गया: उपयोगकर्ता
मैंने अपने सत्यापन वर्ग में निम्न कोड का उपयोग करने का भी प्रयास किया है:
public void setUserId(Long userId)
{
this.userId = userId;
}
और जब मैं एक सत्यापन कोड बनाने मैं बस कार्य करें:
Validation validation = new Validation();
validation.setUserId(userId);
em.persist(validation);
tx.commit();
लेकिन तब से उपयोगकर्ता रिक्त है मैं org.hibernate.PropertyValueException मिलती है: नहीं-अशक्त संपत्ति एक अशक्त या क्षणिक मानों का संदर्भ: उपयोगकर्ता .code
इस समस्या को हल करने के तरीके के बारे में किसी भी मदद की सराहना करेंगे!
+1: यह आदर्श होगा। – Jeremy
जब आप इसे परिभाषित नहीं करते हैं तो 'setUser()' में 'userId' फ़ील्ड को कैसे सेट कर सकते हैं? – Lu55