今天在用jpa写update语句时碰到了2个问题
public interface RRyxxbMapper extends JpaRepository<RRyxxb, Integer>,
JpaSpecificationExecutor<RRyxxb> {
@Query("update RRyxxb set bzzt = ?2 where rid=?1")
void updateRRyxxb(Integer rid,Integer bzzt);
}
运行报错:
org.hibernate.hql.internal.QueryExecutionRequestException: Not supported for DML operations
发现不支持DML操作
百度发现需要@Modifying支持,改为如下:
public interface RRyxxbMapper extends JpaRepository<RRyxxb, Integer>,
JpaSpecificationExecutor<RRyxxb> {
@Modifying
@Query("update RRyxxb set bzzt = ?2 where rid=?1")
void updateRRyxxb(Integer rid,Integer bzzt);
}
运行继续报错:
Executing an update/delete query; nested exception is javax.persistence.TransactionRequiredException
分析应该是缺少事务,加入@Transactional
@Transactional(rollbackFor = Exception.class)
public String update(Integer rid,Integer bzzt){
String message = "0";
if(rid!=null&&bzzt!=null){
try {
rRyxxbMapper.updateRRyxxb(rid, bzzt);
message = "1";
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
return message;
}
运行ok,解决了!