JPA的修改操作

来源:互联网 发布:无线通信算法工程师 编辑:程序博客网 时间:2024/05/22 00:52

JPA的修改操作
JPA的修改有很多种方式,这里罗列常用的几种:
一 调用set方法
二 JPAQL语句修改
三 SQL语句修改
四 JPA 标准查询
下面详细讲讲四种修改方式,以项目代码为例子。
一 调用set方法。
JPA通过JPAQL,实体管理器主键查询,JPA标准查询三种方式得到的java对象被称为实体。在事务管理器的事务范围内的实体,都是持久态实体。JPA会代理持久态实体的set方法。只要调用过set方法,在提交事务时,会把整个实体类的所有字段的修改都生成SQL update语句,发送到数据库执行。
项目代码示例:
企业申请第二步核心业务代码
@Override
public void update2(CompanyApplyFormV2 form) {
// 首先是查询到那个商户申请
CompanyApply ca= easyDao.get(form.getId(), CompanyApply.class);
ca.setAddress(form.getAddress());
ca.setBuildDate(form.getBuildDate());
ca.setEconomicType(form.getEconomicType());
ca.setInstitutionCode(form.getInstitutionCode());
ca.setLegalEntity(ThreeDes.encryptMode(form.getLegalEntity()));
ca.setName(form.getName());
ca.setRegisteredCapital(form.getRegisteredCapital());
ca.setRegistrationNumber(form.getRegistrationNumber());
}
代码中是查询到持久态实体,调用set方法完成修改
二 JPAQL语句修改
调用set方法修改虽然写代码比较爽,但是实际上生成的SQL语句是update所有数据库字段,性能开销比较大。当对性能要求比较高时,不建议使用。JPAQL语句,它的语法和SQL语句不同。语句中的字段是实体类字段,而不是数据库字段。
项目实例:
回调函数拦截器修改订单状态
private int updateOrderStatus(long id, OrderStatus status){
String jpql = “UPDATE “+ThirdPartyOrder.class.getName()+” o set o.orderStatus=:status where o.id =:id and o.trash = false”;
Query query = em.createQuery(jpql);
query.setParameter(“status”,status).setParameter(“id”,id);
return query.executeUpdate();
}
可以看到类名代替了表名,java类字段名代替了数据库字段名。
三 SQL语句修改
SQL语句修改在项目中没有用到。它的写法很简单。与JPAQL语句修改不同的是调用的是EntityManager的createNativeQuery方法。
四 标准查询修改
对于标准查询。
需要注意的是ROOT对象,字面意思是根,实际上Root对象相当于表。
Root对象的get方法获取实体类字段。在set和where的时候都需要用到。
项目中没有实际代码,但是有个demo com.cloud.ptp.modern.TestResource.
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaUpdate update = cb.createCriteriaUpdate(User.class);
Root root = update.from(User.class);
javax.persistence.criteria.Path email = root.get(“email”);
update.set(email, RandomStringUtils.randomAlphanumeric(5)+”@qq.com”);
update.where(cb.equal(root.get(“username”),”yujianbo”));
Query q = em.createQuery(update);
return “Updated “+ q.executeUpdate()+ ” rows.”;

原创粉丝点击