2013-11-15 5 views
1

Как известно, у Hibernate есть очень хорошая функция SaveOrUpdate, когда мы передаем любой объект этому методу, он знает, что данные будут update или новая запись будет добавлена ​​в базу данных. Эта функция также доступна в JOOQ Или в моем коде мне нужно это обработать?поведение JOOQ Vs Hibernate

ответ

4

jOOQ делает то же самое. Если вы измените первичный ключ записи, тогда он будет использовать INSERT, в противном случае он будет использовать UPDATE.

Как бы то ни было, когда вы читаете запись из базы данных, тогда вызов store() вызовет UPDATE, как и следовало ожидать. Если вы создадите новую запись, тогда будет INSERT ed.

С 2.6, это немного сложно клонировать запись, а затем попросить jOOQ обновить ее (поскольку клонирование будет устанавливать первичный ключ в новом экземпляре, следовательно, обозначая его как «новый» -> вставить).

+0

Нет, я имею в виду 'магазин)' метод (делает тх так же, как 'saveOrUpdate()' –

+0

Что именно вы имеете в виду под "стрельбой Update()"? –

+0

Я думаю, увольнение Update() query –

1

Если вы прочтете запись из базы данных и вызовите record.store(), у вас будет такое же поведение метода hibernate saveOrUpdate, это прекрасно работает!

Но в большинстве случаев вы не будете считывать запись из базы данных, вы получите запись с контроллера или вида, например, в этом случае метод record.store() не обновляется, он всегда вставьте даже у вас установленный идентификатор.

На данный момент я реализую свой собственный saveOrUpdate, проверяя идентификатор записи.

public int saveOrUpdate(Record record) { 
    if(record.getId() != null) { 
     return record.update(); 
    } 
    return record.store();  
}