如何引用仅映射到JPQL中的连接的列?

SCd*_*CdF 9 java jpa jpql

假设我有以下两个表:

@Entity public class Foo {
   @Id private int id;
   @ManyToOne()
   @JoinColumn(name = "bar_id")
   private Bar bar;
}
@Entity public class Bar {
   @Id private int id;
   private Boolean flag;
}
Run Code Online (Sandbox Code Playgroud)

我想写一个JPQL查询,Bar.flag根据一组Fooid 改变一些值.

如果这是普通的SQL我会写这样的东西:

UPDATE Bar SET flag = true WHERE id IN (SELECT bar_id from FOO where id = 3);
Run Code Online (Sandbox Code Playgroud)

但是,您无法将其转换为JPQL,因为该bar_id列未映射到实体的属性.

由于bar_id没有直接映射到FooEntity,我如何在JPQL中实现这种查询?

And*_*i I 3

如果您想要一个有效的批量更新查询,则应执行以下操作:

UPDATE Bar b SET flag = true WHERE b IN (SELECT f.bar from FOO f where id = 3);

这个想法是在进行子选择时使用实体。