首页 > 解决方案 > EntityManager.createQuery().executeUpdate 不更新数据库

问题描述

我正在尝试student_class基于studentid.
我正在使用EntityManagerCriteria 来更新记录。
代码编译成功,但数据库中的记录没有更新。

学生实体:

@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帮忙。

标签: javaspring-boothibernateentitymanagerhibernate-entitymanager

解决方案


推荐阅读