4

この更新クエリの場合

update TestDB.dbo.MyEmp set empname=? where empid=?

私は自分のDAOクラスで書いた

MyEmployee myEmployee = new MyEmployee();

MyEmployee myEmployee =(MyEmployee )session.load(MyEmployee.class, 
  new Integer(1700));
myEmployee.setName("updatedName"); 
session.update(myEmployee );

正常に動作していますが、以下で説明するこのタイプの更新クエリについて知る必要があります

update TestDB.dbo.MyEmp set empsalary=? where empid=? && empname = ?

(つまり、 where 句で 2 つの条件を使用してテーブルを更新する必要があります。これは HQL で実行できますが、saveOrUpdate メソッドを使用してこれを実装する方法を知りたい..)

update または saveOrUpdate method() を使用して更新するにはどうすればよいですか? 休止状態でそのようにすることが可能かどうか?

4

2 に答える 2

5

まず、次の 2 つの方法でオブジェクトをフェッチする必要があります。

1-HQL

Query query = session.createQuery("from MyEmployee e where e.id = ? and e.name = ?");
query.setParameter(0, 1);
query.setParameter(1, "myName");
MyEmployee e = (MyEmployee) query.uniqueResult();
e.setSalary(5000);
session.saveOrUpdate(e);

2-基準

Criteria criteria = session.createCriteria(MyEmployee.class);
criteria.add(Restrictionss.eq("id", 1)).add(Restrictions.eq("name", "myName");
MyEmployee e = (MyEmployee) criteria.uniqueResult();
e.setSalary(5000);
session.saveOrUpdate(e);

ちなみに、デフォルトのフラッシュモードでは、オブジェクトをフェッチして更新すると、セッションの最後に自動的に永続化されます (StatelessSession を使用していない場合)。

于 2013-02-06T07:24:34.630 に答える
0

Hibernatesaveorupdate はテーブルエンティティを取ります。つまり、Pojoクラスをパラメータとして受け取ります。Hibernateはテーブル内のそのエンティティを主キー(id)で認識します。

したがって、残りのパラメータを使用して他のwhere句を追加する必要はありません。これは、エンティティ内のデータに関係なく、エンティティを保存することがすでに決定されているためです。

他のパラメータを本当にチェックしたい場合は、前にJava自体で同じものをチェックする必要がありますSaveorupdate

オブジェクトデータ全体を保存することにした場合は、saveOrUpdate他の方法でのみ使用してくださいHQLCriteriasRestrictions

于 2013-02-06T07:32:33.857 に答える