Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用join对spring数据jpa进行批量更新_Jpa_Spring Boot_Spring Data Jpa - Fatal编程技术网

使用join对spring数据jpa进行批量更新

使用join对spring数据jpa进行批量更新,jpa,spring-boot,spring-data-jpa,Jpa,Spring Boot,Spring Data Jpa,我在用spring数据JPA批量更新JPA2.1时遇到问题 根据文件: 5.3.8。修改查询 以上所有部分都描述了如何声明查询以访问给定实体或实体集合。当然,您可以使用Spring数据存储库的自定义实现中描述的工具添加自定义修改行为。由于这种方法对于全面的自定义功能是可行的,因此可以通过使用@modify: 但是我需要更新的实体与另一个实体有@manytone关系 @Entity @Table(name = "usuarios", indexes = { @Index(name = "i

我在用spring数据JPA批量更新JPA2.1时遇到问题

根据文件:

5.3.8。修改查询 以上所有部分都描述了如何声明查询以访问给定实体或实体集合。当然,您可以使用Spring数据存储库的自定义实现中描述的工具添加自定义修改行为。由于这种方法对于全面的自定义功能是可行的,因此可以通过使用@modify:

但是我需要更新的实体与另一个实体有@manytone关系

@Entity
@Table(name = "usuarios", indexes = {
    @Index(name = "idx_usuarios_rut", columnList = "rut")
    ,@Index(name = "idx_usuarios_email", columnList = "email")})
public class User extends BaseEntity implements UserDetails {
    ...

    @NotNull(message = "Debe seleccionar un nivel")
    @ManyToOne(fetch = FetchType.LAZY)
    public Role getRole() {
        return role;
    }
}
所以我的更新是:

生成的本机查询是update usuarios cross join set password=?其中,company_id=?nombre不在“ROLE_ADMIN”、“ROLE_ROOT”中,因此我得到com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL语法有错误;检查手册

我做错了什么

我试过了

@Query("update User u set u.password = ?2 join u.role r where u.company = ?1 and r.name not in ('ROLE_ADMIN', 'ROLE_ROOT')")

但这是一个格式错误的更新语句org.hibernate.QueryException:要遍历的节点不能为null![更新cl.arvisoft.mantenimiento.jpa.User u set u.password=?2加入u.role r,其中u.company=?1和r.name不在“role\u ADMIN”、“role\u ROOT”中]。

在JPQL中,执行更新操作时无法加入实体请参阅

若要解决此问题,请尝试使用子选择,类似于未测试的内容:

使现代化 用户u 设置 u、 密码=?2 哪里 u、 公司=?1和 u、 角色中的角色从角色r中选择r,其中r.name不在“角色\u管理员”、“角色\u根目录”中
谢谢@Cepr0,现在生成的本机更新语句是update usuarios set password=?其中,company_id=?和角色中的角色id,从角色角色1中选择角色1。id,其中角色1。名称不在“角色管理”、“角色根目录”中。
@Modifying
@Transactional
@Query("update User u set u.password = ?2 where u.company = ?1 and u.role.name not in ('ROLE_ADMIN', 'ROLE_ROOT')")
int updatePasswordForAll(Company company, String password);
@Query("update User u set u.password = ?2 join u.role r where u.company = ?1 and r.name not in ('ROLE_ADMIN', 'ROLE_ROOT')")