我在大学班级的家庭作业中要做一项特定的练习。给定这样的实体结构:
@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);
}
这只是我的瞎子,但我找不到任何材料来解释如何做这样的事情。有人对如何解决此任务有任何建议吗?
您不会使用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();
}