2010-06-11 4 views
0

Я использую datanucleus и jdo в проекте GWT. Как я могу получить сгенерированный первичный ключ после добавления элемента в базу данных с makePersistent()Datanucleus JDO Восстановить только что сгенерированный первичный ключ

Edit Мы используем аннотации, вот первичный ключ:

@PrimaryKey 
@Column(name = "id_bla", allowsNull = "false") 
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY, extensions = { @Extension(vendorName = "datanucleus", key = "strategy-when-notnull", value = "false") }) 
private Long idBla; 

Я не тот, кто сделал картографирование, и я пока не получаю все это.

ответ

0

ключ объекта должен быть автоматически установлен, когда он упорствовал:

MyObject obj = new MyObject(); 
Long id = obj.getId(); // WRONG! Will still be null. 
pm.makePersistent(obj); 
id = obj.getId(); // Correct. 
+0

Спасибо за ответ. Это поведение, которое я ожидал, но после моего «makePersistent (obj)» мой obj.getId() по-прежнему равен нулю ... Пока идентификатор в БД правильно сгенерирован и все остальные данные сохраняются нормально. – Jla

+0

Вы используете аннотации или XML? Если идентификатор появляется в базе данных, то аннотации (например, identityType, valueStrategy и т. Д.) Являются предположительно правильными. Работает ли getObjectById()? Проверьте наличие опечаток в getId()! –

+0

Я использую аннотации (я редактировал свой пост). Это БД, который генерирует идентификатор, чтобы я был причиной, по которой я не могу получить его сразу после makePersitent. Я просто попытался getObjectById() с ID из базы данных, но я получаю исключение «Нет такой строки базы данных». Когда я запрашиваю все результаты, хотя идентификаторы извлекаются должным образом. – Jla

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