在hibernate中更新一些列值

时间:2012-08-05 08:48:00

标签: java hibernate

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

4 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分: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=?

答案 2 :(得分: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();

答案 3 :(得分: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将仅更新已修改的列,其余的列将不受影响。