JPA将多行Map到List

wyyhbhjk  于 2022-11-14  发布在  其他
关注(0)|答案(1)|浏览(146)

你好,有没有办法让java可以将多行带有OneToMany引用的连接表Map到列表中?
我需要使用视图,因为我需要满足一些条件,但是我从这个连接中得到了多行,因为一个实体被引用了很多次,如下所示:我们可以有foo和bar,其中bar引用foo:
查看方式:

SELECT
     foo.id fooID,
     foo.name fooName,
     b.id barID
FROM foo
          LEFT JOIN bar b on b.foo_id = foo.id
          LEFT JOIN bar_properties bp ON b.property_id = bp.id
          LEFT JOIN bar_states bs ON b.state_id = bs.id
    WHERE
          bs.name = 'active'
          bp.name = 'NEW'

测试结果

fooID   fooName   barId
22,     test2,    1
22,     test2,    2
23,     test3,    3

在Java中,调用ViewRepository.findAll()后,我只需要得到2条记录(而不是3条),但我需要在@OneToMany列表中有多条记录,如下所示:

fooID   fooName   bars
22,     test2,    [1,2]
23,     test2,    [3]

我尝试在视图模型中使用如下注解:

@OneToMany(mappedBy = "foo", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
    @Where(clause = "")
    private final List<Bar> bars = new ArrayList<>();

但是我不能正确地在where条件中使用多个其他实体。例如,bar的状态或属性,它们在其他表中。

efzxgjgh

efzxgjgh1#

这只是一个小想法,为什么不使用transiant对象,并使用带有PostLoad注解的侦听器手动设置列表。我不知道它会导致什么。您必须删除导致select返回多行的原因。

相关问题