Больше не удается получить модель БД getId() в activejdbc 1.4.12

Я использовал activejdbc 1.4.9, и следующий пример кода работал нормально.

Client client = new Client();
client.save(); 
Assert.assertNotNull(client.getId());

Поскольку я обновился до 1.4.12, client.getId() всегда возвращает значение null, когда при сохранении вставляется новая запись. то есть идентификатор не обновляется.

Кто-нибудь тоже это заметил? Нужно ли мне делать что-то другое, используя эту версию, чтобы получить вновь созданный идентификатор?


person ccarvalho    schedule 26.09.2016    source источник


Ответы (1)


Я не могу подтвердить это с версией 1.4.12. Например, я написал этот пример: https://github.com/javalite/simple-example/blob/new_id. Ознакомьтесь с кодом в Main.java. Как видите, код идентичен вашему, но в строке 21 он выводит реальное значение нового идентификатора.

Если вы можете собрать простой пример, который повторяет вашу проблему, я посмотрю.

РЕДАКТИРОВАТЬ:

Теперь, когда вы предоставили больше информации в комментариях ниже, проблема заключается в том, что вы установили идентификатор в пустую строку: "". Поскольку идентификатор больше не null, метод save() использует update, а не insert. Затем обновление использует значение ID для обновления «существующей» записи и в результате ничего не делает. Возможна манипуляция со значением ID, но не рекомендуется. Дополнительные сведения см. здесь: http://javalite.io/surrogate_primary_keys.

person ipolevoy    schedule 26.09.2016
comment
При подготовке примера я заметил, что может быть причиной проблемы. Мой код устанавливает атрибуты перед сохранением модели, например: public setClient(String id, String name) { Client client = new Client(); client.setId (идентификатор); client.setName(имя); клиент.сохранить(); } Если это новый клиент, параметр id будет пустым (), а не нулевым. По-видимому, в предыдущей версии activejdbc понимал, что либо null, либо означало вставить новую запись. И теперь он вставляется только тогда, когда id равен нулю. Может это быть? - person ccarvalho; 27.09.2016
comment
Та же логика по-прежнему верна. Пожалуйста, посмотрите, как он решает обновить или вставить: .java#L2583-L2583" rel="nofollow noreferrer">github.com/javalite/activejdbc/blob/ - person ipolevoy; 27.09.2016