按给定类的Spring Data JPA-JPQL查询

问题描述 投票:0回答:1

我在大学班级的家庭作业中要做一项特定的练习。给定这样的实体结构:

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Parent {
...some fields...
}

@Entity
public class ChildA extends Parent {
...
}

@Entity
public class ChildB extends Parent {
...
}

我必须在ParentRepository或JPQL查询中实现JpaRepository方法,以对由Class<? extends Parent>参数指定的表执行更新操作。简单地说,方法应该更新某些字段,但只能在作为参数给出的子类中。方法结构应为:

public interface ParentRepository extends JpaRepository<Parent, Integer> {

    void updateInBulk(Class<? extends Parent> clazz, int someParameter);
}

我想出了类似的方法,但是没有用。

public interface ParentRepository extends JpaRepository<Parent, Integer> {

    @Modifying
    @Query("update :entity e set e.some_field = 'T' where e.other_field > :some_param")
    void updateInBulk(@Param("entity") Class<? extends Parent> clazz, @Param("some_param") int someParam);
}

这只是我的瞎子,但我找不到任何材料来解释如何做这样的事情。有人对如何解决此任务有任何建议吗?

spring jpa spring-data-jpa spring-data jpql
1个回答
0
投票

您不会使用JPQL进行此操作,但是您想为此写一个Criteria query-您也可以将其添加到JPARepository中。诸如此类(您需要根据需要进行调整。)

 public void updateInBulk(Class<? extends Parent> clazz, String someParameterName , int someValue) {
    CriteriaBuilder cb = this.em.getCriteriaBuilder();

    // create update
    CriteriaUpdate<Order> update = cb.createCriteriaUpdate(clazz);

    // set the root class
    Root e = update.from(clazz);

    // set update and where clause
    update.set(someParameterName, someValue);
  //  update.where(cb.greaterThanOrEqualTo(e.get(someParameterName), oldValue));

    // perform update
    this.em.createQuery(update).executeUpdate();
}
© www.soinside.com 2019 - 2024. All rights reserved.