我正在使用datanucleus/MySQL5.6/Google App Engine1.9.4/JDO3.0/Spring3.0。當使用一對多關係關聯時,JDO嘗試創建新記錄
的情況是,我有一個User類
@PersistenceCapable(table="Users")
public class User {
@PrimaryKey
@Persistent(column="UserID", valueStrategy=IdGeneratorStrategy.NATIVE)
private Long ID;
//some more fields below
}
我有一個UserSession類
@PersistenceCapable(table="usersessions")
public class UserSession extends DomainObject {
private static final long serialVersionUID = 1L;
@PrimaryKey
@Persistent(column="SessionID", valueStrategy=IdGeneratorStrategy.NATIVE)
private Long ID;
@Persistent
@Column(name="UserID")
private User user;
}
我有一對多的關係UserSession
User
之間。在UserSession表中,我定義了一個引用User表的userid(主鍵)的外鍵。
我在用戶第一次註冊時創建了用戶記錄。
每次用戶登錄我在數據庫中創建一個UserSession記錄。我能夠在數據庫中成功創建用戶記錄。 當用戶登錄時,我創建一個UserSession對象,將以前檢索到的User對象關聯到UserSession對象。
當我堅持UserSession時,它試圖在數據庫中創建一個新的用戶記錄。
我只想將現有的用戶記錄與新創建的UserSession對象相關聯。
我不想擁有雙向的一對多關聯。
下面是創建UserSession對象的代碼,
@Override
@Transactional(propagation = Propagation.REQUIRED)
public UserSession createSession(User user, String sessionId) {
PersistenceManager pm = persistenceManagerFactory.getPersistenceManager();
try {
UserSession userSession = new UserSession();
userSession.setAppSession(sessionId);
userSession.setUser(user);
pm.makePersistent(user);
return userSession;
} finally {
pm.close();
}
}
請幫助。 在此先感謝。
和「用戶」處於什麼生命週期狀態?超脫?短暫的?鏤空?沒有這些信息,我看不出你怎麼理解它。日誌說? –
我使用一個persistenceManager檢索用戶,然後關閉它。然後我試圖使用另一個persistenceManager創建一個UserSession對象。我認爲用戶對象現在處於瞬態狀態。日誌說,請求失敗,因爲它試圖再次插入用戶對象,並且由於唯一的約束而失敗。 – Thirupathi