2

id、name、ageの3つの列があるcustomerテーブルがあります。

年齢のない顧客オブジェクトを作成する場合、つまり年齢値を設定しない場合、同じ顧客(顧客IDで識別される)がテーブルに存在する場合、saveOrUpdate()は年齢列を0に更新します。年齢列の値がすでにテーブルに存在する場合、ゼロまたはnullで上書きされないようにしようとしています。たとえば、以下に貼り付けたコードスニペットのように、顧客ID 10の行がすでに存在する場合、年齢値は次のようになります。この場合、私の年齢はゼロで上書きされるべきではありません。

私はグーグルで検索し、それを達成するためにdynamicUpdateをtrueに設定できることを発見しました。しかし、コードを実行すると、年齢の値は0で上書きされます。コードスニペットを貼り付けています

@Entity
@Table(name = "CUSTOMER")
@org.hibernate.annotations.Entity(
        dynamicUpdate = true
)
public class Customer {

    @Id
    @GeneratedValue
    @Column(name = "CUSTOMER_ID")
    private int custId;

    @Column(name = "CUSTOMER_NAME")
    private String custName;

    @Column(name = "CUSTOMER_AGE")
    private int custAge;
        ............
        ...........

       Customer cust = new Customer();
       cust.setCustId(10);
       cust.setCustName("anand");       
       session.saveOrUpdate(cust);      
       tx.commit();
4

3 に答える 3

4

dynamicUpdate を機能させるには、get と update が同じトランザクション内にある必要があります。

于 2015-07-21T05:52:34.050 に答える
0

まず、custAge の型としてanIntegerではなくan を使用することをお勧めします。intこのようにして、空の値と有効な 0 の値を区別できます。

次に、dynamicUpdate = true何をしようとしているかに役立ちますが、オブジェクトをセッションに再アタッチする必要もあります (更新の場合)。例えば:

customer = session.get(Customer.class, id);
customer.set(...);
session.saveOrUpdate(customer);
于 2012-08-23T19:29:09.547 に答える
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:49:35.267 に答える