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