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
Java 使用带Spring的QueryDSL进行一对多投影_Java_Jpa_Querydsl - Fatal编程技术网

Java 使用带Spring的QueryDSL进行一对多投影

Java 使用带Spring的QueryDSL进行一对多投影,java,jpa,querydsl,Java,Jpa,Querydsl,我正在尝试在SpringBoot中使用QueryDSL,它工作得很好,直到我遇到一个我找不到答案的问题。假设我有以下结构: +-------+ +----------+ +-------+ | foo | | foo_bar | | bar | +-------+ +----------+ +-------+ | id | -------->| foo_id |

我正在尝试在SpringBoot中使用QueryDSL,它工作得很好,直到我遇到一个我找不到答案的问题。假设我有以下结构:

+-------+          +----------+          +-------+
| foo   |          | foo_bar  |          | bar   |
+-------+          +----------+          +-------+
| id    | -------->| foo_id   |       +- | id    |
| name  |          | bar_id   |<------|  | name  |
+-------+          | position |          +-------+
                   +----------+
FooBar.class

@Entity
@Table(name = "foo_bar")
public class AlbumView{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false)
    private int position;

    @ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
    @JoinColumn(name = "foo_id")
    private Foo foo;

    @ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
    @JoinColumn(name = "bar_id")
    private Bar bar;

    // Getters and Setters
}    
酒吧

@Entity
@Table(name = "bar")
public class Bar{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false, length = 100)
    private String name;

    // Relations

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "bar")
    private List<FooBar> fooBars;

    // Getters and Setters
}       

提前谢谢

只是一个随机猜测:必须尝试使用
foo.fooBars.any().position
@Entity
@Table(name = "bar")
public class Bar{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false, length = 100)
    private String name;

    // Relations

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "bar")
    private List<FooBar> fooBars;

    // Getters and Setters
}       
JPQLQuery query = new JPAQuery(entityManager);
QFoo foo = QFoo.foo;
QFooBar fooBar = QFooBar.fooBar;

return query.from(foo)
        .join(foo.fooBars, fooBar).on(fooBar.bar.id.eq((long)1))
        .list(Projections.bean(Foo.class,
                foo.id,
                foo.name,
                Projections.bean(FooBar.class,
                        ???
                        // foo.fooBars.position can't be used because fooBars is an array
                        // foo.fooBars.get(0).position can't be used because i throws NullPointerException
                ).as("fooBars")
            )
        );