0

特定の列を持つ1つのクラスがあります。

Class A
{
    private String A;
    private String B;
    private String C;

    // Getter Setter of respectives
}

何が起こったのか、列Aと列Bの値が同じで、列Cの値が変更されただけです。だから私は以下のようなことをします

A a = new A();
a.setA(..);
a.setB(..);

for(i=0;i<length;i++){
     a.setC(..);

     getHibernateTemplate.saveOrUpdate(a);

     // or something like this
     // A a1 = new A();
     // a1 = a;
     // a1. setC(..);
     // getHibernateTemplate.saveOrUpdate(a1);

}

私の問題は、レコードの長さを保存せず、その単一のレコードのみを更新することです。

休止状態が永続オブジェクトとしてアクセスする理由を知っています。値を変更して再度保存しても、既存のレコードが更新され、毎回新しいオブジェクトを取得してすべての値を設定することで解決できます。しかし、私はそれを望んでいません。更新する代わりにそのレコードを保存するように休止状態に指示する方法はありますか?

4

2 に答える 2

2

実際のエンティティの詳細については説明していません。同じ値でエンティティを保存する場合は、identifier プロパティを として設定しますnull

ドキュメントから -

saveOrUpdate()

  • オブジェクトがこのセッションですでに永続化されている場合は、何もしない
  • セッションに関連付けられた別のオブジェクトが同じ識別子を持つ場合、例外をスローします
  • オブジェクトに識別子プロパティがない場合は、save()
  • オブジェクトの識別子に、新しくインスタンス化されたオブジェクトに割り当てられた値がある場合、それを save()
  • オブジェクトが または によってバージョン管理され、バージョン プロパティ値が新しくインスタンス化されたオブジェクトに割り当てられた値と同じである場合、それを save()
  • それ以外の場合は update() オブジェクト

saveOrUpdateAll()

  • ID に従って、指定されたすべての永続インスタンスを保存または更新します (構成された「未保存値」と一致しますか?)。インスタンスを現在の Hibernate セッションに関連付けます。

[うまくいく場合は、他の クエリでこれを試すことができます]


編集:それは私の見落としです。コードを注意深くチェックしていません。Afor ループの外でオブジェクトを定義したため、同じオブジェクトが各反復で更新されていました。以下のコードを試してみてください。

for(i=0;i<length;i++){
A a = new A();  //-- Create new object for each iteration
a.setA(..);
a.setB(..);
a.setC(..);

getHibernateTemplate.saveOrUpdate(a);
}
于 2013-07-10T11:16:24.050 に答える
1

はい。 save(a) 代わりに 試してくださいsaveOrUpdate(a)

getHibernateTemplate.save(a);  //each time a new object saves.
于 2013-07-10T10:53:58.283 に答える