2

org.hibernate.annotations.entity(dynamicUpdate=true) を使用してエンティティ クラス アノテーションで dynamicUpdate=true (すべての列ではなく選択的な列を更新するため) を使用した後でも、休止状態はテーブルのすべてのフィールドを更新しようとしています。いくつかの列に「not null」制約があると、例外がスローされます。これを解決するには?できるだけ早く助けてください..

4

3 に答える 3

4

これを試して、

@org.hibernate.annotations.Entity(dynamicUpdate = true, selectBeforeUpdate = true)
于 2013-01-02T05:56:32.343 に答える
4

動的更新を機能させるには、最初に休止状態からオブジェクトをフェッチしてから、フィールドを変更する必要があります。

p = session.get(Person.class,1);
p.setFirstName("Kamal");

これにより、first_name 列のみを更新するクエリが生成されます。

以下は動作しません。他のすべての列が null に設定された更新クエリが発行されます。

p = new Person()
p.setId(1)
p.setFirstName("Kamal")
session.update(p)

特定の列のみを更新する場合は、update HQL コマンドを使用できます。これは推奨されません。キャッシュをバイパスするためです。正しいアプローチは、上で概説したもので、オブジェクトをロードしてから、変更が必要なフィールドを変更します。

于 2012-09-05T09:11:46.067 に答える
0

動的更新は、最初に session.get(...) を使用して値を取得した場合にのみ機能します。この場合、10 列があり、5 列を更新したいとします。次に、最初に id を使用してオブジェクトを取得し、取得したオブジェクトに新しい値を設定します。それは正常に動作しますさらに、5列のみのコーディングを記述し、その5列から1列を更新すると、以下に示すように動的更新クエリを使用して起動します

Hibernate: usermaster セット名を更新 =? user_id=?

以下は私のコードで、ここではフロントエンドから名前のみを変更しました

Session session = sessionFactory.openSession();
Transaction tran = session.beginTransaction();
Usermaster obj = (Usermaster) session.get(Usermaster.class,
        usermaster.getUserId());
obj.setUsername(usermaster.getUsername());
obj.setName(usermaster.getName());
obj.setContact(usermaster.getContact());
obj.setEmail(usermaster.getEmail());
obj.setUserStatus(usermaster.getUserStatus());
obj.setUserType(usermaster.getUserType());
session.update(obj);
于 2015-06-10T16:52:56.620 に答える