vli*_*o20 11 java sql orm hibernate
是否有可能同时使用执行更新Criteria的Hibernate?例如:
Session session = getSession();
Criteria crit = session.createCriteria(User.class);
crit.add(Restrictions.eq("token", sessionToken));
User user= new User();
Transaction tx = session.getTransaction();
try
{
tx.begin();
session.updateWithCriteria(user, crit); //my imaginary function
tx.commit();
}
catch (Exception e)
{
e.printStackTrace();
tx.rollback();
}
session.close();
Run Code Online (Sandbox Code Playgroud)
Rad*_*ler 11
有一个非常强大的功能叫:
来自doc的小小的引用:
...但是,Hibernate为通过Hibernate查询语言执行的批量SQL样式DML语句执行提供了方法...
所以,虽然这不是关于criteria- 我们仍然可以使用我们的域模型进行查询,因为它是关于HQL的.这是显示权力的片段:
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
String hqlUpdate = "update Customer c set c.name = :newName where c.name = :oldName";
// or String hqlUpdate = "update Customer set name = :newName where name = :oldName";
int updatedEntities = s.createQuery( hqlUpdate )
.setString( "newName", newName )
.setString( "oldName", oldName )
.executeUpdate();
tx.commit();
session.close();
Run Code Online (Sandbox Code Playgroud)
摘要:有了这个:
现在我们可以做这样的事情进行批量更新和删除.为criteriaUpdate和CriteriaDelete发布了新的api
CriteriaBuilder cb = this.em.getCriteriaBuilder();
// create update
CriteriaUpdate<Order> update = cb.createCriteriaUpdate(Order.class);
// set the root class
Root e = update.from(Order.class);
// set update and where clause
update.set("amount", newAmount);
update.where(cb.greaterThanOrEqualTo(e.get("amount"), oldAmount));
// perform update
this.em.createQuery(update).executeUpdate();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
38352 次 |
| 最近记录: |