2014-06-07 4 views
0

Я использую datanucleus/MySQL5.6/Google App Engine1.9.4/JDO3.0/Spring3.0.JDO пытается создать новую запись при связывании с использованием отношения один к большому числу

Ситуация, у меня есть класс пользователей

@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; 

} 

У меня есть один ко многим отношения между User к UserSession. В таблице UserSession я определил внешний ключ, ссылающийся на userid (первичный ключ) таблицы User.

Я создал запись пользователя, когда пользователь впервые регистрируется.

Каждый пользователь регистрируется. Я создаю запись 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(); 
     } 
    } 

Пожалуйста, помогите. Спасибо заранее.

+0

и «пользователь» находится в состоянии жизненного цикла? отдельностоящий? переходная? долбить? Без такой информации я не понимаю, как вы ее понимаете. Журнал говорит? –

+0

Я получил пользователя, используя persistenceManager, который затем закрыт. Затем я пытаюсь создать объект UserSession, используя другой persistenceManager. Я думаю, что теперь объект пользователя находится в переходном состоянии. И журнал говорит, запрос терпит неудачу, потому что он пытается снова вставить объект пользователя, и он терпит неудачу из-за уникального ограничения. – Thirupathi

ответ

0

Если объект находится в переходном состоянии, тогда он создаст новый объект, как указано в спецификации JDO. И журнал расскажет вам, в каком состоянии он находится, поэтому не нужно угадывать.

Если вы не хотите, чтобы NEW-объект передавал управляемый (постоянно-чистый, полый и т. Д.) Или отдельный объект, когда вы вызываете makePersistent.

 Смежные вопросы

  • Нет связанных вопросов^_^