2

我有一个表,其中有 14 列。现在我有一个对象对应于我只有 5 个值要更新的表。
我正在使用 saveOrUpdate 方法来保存/更新行。问题是当我使用此方法更新这 5 列时,所有其他 9 列值都设置为 null。
一种解决方案是我编写更新 sql 查询来做同样的事情,但我想使用 Hibernate API 的不是 sql 查询。
有没有办法做到这一点?

4

4 回答 4

9
Foo objectToUpdate = (Foo) session.get(Foo.class, idOfObjectToUpdate);
objectToUpdate.setField1(newValue1);
objectToUpdate.setField2(newValue2);

无需调用saveOrUpdate()or merge():对象已附加,因此所有内容都在事务结束时刷新并提交。

于 2012-08-05T08:52:00.220 回答
0

在实体上使用 DynamicUpdate

例子:

Query q = session.createQuery("from StockTransaction where tranId = :tranId ");
q.setParameter("tranId", 11);
StockTransaction stockTran = (StockTransaction)q.list().get(0);

stockTran.setVolume(4000000L);
session.update(stockTran);

SQL会像;

Hibernate:
    update
        mkyong.stock_transaction
    set
        VOLUME=?
    where
        TRAN_ID=?
于 2017-08-03T14:31:21.853 回答
0

使用 Hibernate 5 尝试下面的代码....

CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaUpdate<Vehicle> criteria = builder.createCriteriaUpdate(Vehicle.class);
Root<Vehicle> root = criteria.from(Vehicle.class);
criteria.set(root.get("ownername"), "Ashok Parmar");
criteria.where(builder.equal(root.get("vehicleId"), "123"));
session.createQuery(criteria).executeUpdate();
于 2017-09-11T10:06:14.203 回答
0

在您的实体类上添加 @DynamicUpdate 注释

@Entity
@DynamicUpdate
public class Product implements Serializable {

//rest of the codes are omitted for brevity

}

然后更新表的特定列(或列)值

Product newProduct = session.get(Product.class, id);//here id is the product_id for which you are gonna update
newProduct.setName("Pencil 2B");//new name
session.update(newProduct);

@DynamicUpdate 将仅更新已修改的列,其余列不会受到影响。

于 2018-11-22T15:29:27.037 回答