1

私たちが知っているように、このメソッドにオブジェクトを渡すと、Hibernate非常に優れた機能SaveOrUpdateupdateがあり、データがデータベースに追加されるか、新しいレコードが追加されることがわかります。この機能は、JOOQまたは私のコードでこれを処理する必要がありますか?

4

2 に答える 2

4

jOOQも同じです。レコードの主キーを変更するとが使用されます。INSERTそれ以外の場合は が使用されますUPDATE

そのままで、データベースからレコードを読み取ると、呼び出すと期待どおりstore()にトリガーUPDATEされます。新しいレコードを作成すると、INSERTed になります。

2.6 では、レコードを複製してから jOOQ に更新を依頼するのは少し難しくなっています (複製すると新しいインスタンスに主キーが設定されるため、"new" -> insert とマークされるため)。

于 2013-11-15T10:33:44.473 に答える
1

データベースからレコードを読み取って record.store() を呼び出すと、休止状態の saveOrUpdate メソッドと同じ動作が得られ、完全に機能します!

ただし、ほとんどの場合、データベースからレコードを読み取ることはありません。たとえば、コントローラーまたはビューからレコードを受け取ります。この場合、メソッド record.store() は更新されず、持っていても常に挿入されます。 IDを設定しました。

今のところ、レコード ID でチェックして、独自の saveOrUpdate を実装しています。

public int saveOrUpdate(Record record) {
    if(record.getId() != null) {
        return record.update();
    } 
    return record.store();    
}
于 2015-08-12T19:34:17.253 に答える