java - EntityManager.createQuery().executeUpdate 不更新数据库
问题描述
我正在尝试student_class
基于studentid
.
我正在使用EntityManager
Criteria 来更新记录。
代码编译成功,但数据库中的记录没有更新。
学生实体:
@Getter
@Setter
Class StudentEntity{
@Id
@Column(name = "student_id")
private long studentId;
@Column(name = "student_name")
private String studentName;
@Column(name = "student_class")
private String studentClass;
}
更新学生班级列的逻辑
@Repository
pubilc class StudentRepository {
@PersistenceContext
EntityManager entityManager;
@Transactional
public void update(List < StidentEntity > studentList) {
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaUpdate < StudentEntity > criteriaUpdate = cb.createCriteriaUpdate(StudentEntity.class);
Root < StudentEntity > root = creiteriaUpdate.from(StudentEntity.class);
studentList.forEach(request - > {
List < Predicate > predicates = buildWhereClase(cb, root, request);
criteriaUpdate.where(predicates.toArray(new Predicate[] {}));
formUpdateQuery(criteriaUpdate, root, request);
int res = entityManager.createQuery(criteriaUpdate).executeUpdate();
System.out.println("Update status: " + res);
}
}
private List < Predicate > buildWhereClasue(CruteriaBuilder builder, Root < StudentEntity > root, StudentEntity request) {
List < Predicate > predicates = new ArrayList < > ();
predicates.add(builder.equal(root.get("studentId"), request.getStudentId()));
return predicates;
}
private void formUpdateQuery(CriteriaUpdate < StudentEntity > criteria, Root < StudentEntity > root, StudentEntity request) {
criteria.set(root.get("studentClass", request.getStudentClass()));
}
}
请Hiber帮忙。
解决方案
推荐阅读
- ionic-framework - 将图像拆分为离子部分
- docker - Rails Docker-compose 和现有的 nginx
- c++ - 与 CPU 时钟相比,OpenCL 分析时间戳的持续时间不一致
- python - 用于大脑 MRI 的调情配准工具提供了令人难以置信的结果
- python - Plotly Dash:如何使用 for 循环生成 html 组件?
- ios - Swift UI:使用数组中的随机元素更新视图
- javascript - 如何将复选框选中的字符串值与 li 元素进行比较以编辑最后一个
- javascript - 使用 refs 在 React 中滚动到不同的、可滚动的 div 中的元素
- c - 将 jpeglib 链接到 makefile
- python-3.x - google colab vs Pycharm上的不同消息提示