你好,有没有办法让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的状态或属性,它们在其他表中。
1条答案
按热度按时间efzxgjgh1#
这只是一个小想法,为什么不使用transiant对象,并使用带有PostLoad注解的侦听器手动设置列表。我不知道它会导致什么。您必须删除导致select返回多行的原因。