spring-data-jpa Spring Data JPA查询-包含另一个自定义对象的类投影

ntjbwcob  于 2022-11-10  发布在  Spring
关注(0)|答案(1)|浏览(207)

假设我有一个Foo实体(字段:idnamebarId)和Bar实体(字段:idage),以一对多的关系。我想选择所有的Foo,并附加相应的条形图age
我看到两个选项,但似乎都不起作用:
1.所谓closed projection approach

@Query("select f as foo, b.age as age from Foo f inner join Bar b on f.barId = b.id")
List<FooWithAge> query1();

其中,FooWithAge是具有作为方法的Foo getFoo()Integer getAge()接口;
1.所谓class projection approach

@Query("select new FooWithAge(new Foo(f), b.age) from Foo f inner join Bar b on f.barId = b.id")
List<FooWithAge> query2();

其中,FooWithAge是一个,具有字段Foo fooInteger age以及一个 * 构造函数,该构造函数将这两个字段作为参数。*
这些解决方案似乎都不起作用。第三个解决方案是将Foo的所有字段作为FooWithAge的构造函数的参数,但我希望找到一个更干净的解决方案。
注意:我只能使用vanilla SpringDataJPA查询,原生查询除外。

zbsbpyhn

zbsbpyhn1#

1.对于foo对象,您必须定义一个子接口:

public interface FooWithAge {

    String getAge();
    FooView getFoo();

    interface FooView {
        //list of getters of foo
    }
}

1.在第一个参数中,您将在foo中创建一个foo,因此基本上只需传递f

@Query("select new FooWithAge(f, b.age) from Foo f inner join Bar b on f.barId = b.id")
List<FooWithAge> query2();

相关问题