我将spring boot 2.1与spring数据jpa和hibernate一起使用
@Entity
public class Factories{
@Id
@SequenceGenerator(name = "factories_id_seq", sequenceName = "factories_id_seq", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "factories_id_seq")
private Integer id;
@OneToMany(mappedBy = "factory", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
private List<Machines> machines = new ArrayList<>();
@ElementCollection(fetch = FetchType.LAZY)
private Set<String> emails = new HashSet<>();
}
在我的机器实体中,我有一个equals和hashCode方法。
查询完成
SELECT distinct f from Factories f "
+ "LEFT JOIN FETCH f.machines "
+ "Left JOIN FETCH f.emails "
+ "Left JOIN FETCH f.cities "
+ "where f.id=:id
我尝试了不一样的情况
我的ID为1的工厂
有3台机器和3封电子邮件
我没有为工厂装载3台机器和3封电子邮件,而是9台机器。在数据库中只有3。
这就像笛卡尔积一样。
任何想法
答案 0 :(得分:0)
您刚刚遇到了Hibernate或任何JPA的<p-accordion [multiple]="true">
<p-accordionTab header="Accordion Tab 1" [selected]="true">
<ul>
<li>Colors</li>
<li>Cities</li>
<li>Facility</li>
<li>Hobbies</li>
</ul>
</p-accordionTab>
<p-accordionTab header="Accordion Tab 2" [selected]="true">
<ul>
<li>Students</li>
</ul>
</p-accordionTab>
<p-accordionTab header="Accordion Tab 3" [selected]="true">
<ul>
<li>Music</li>
</ul>
</p-accordionTab>
</p-accordion>
问题。是的,您是对的,您看到的是MultipleBagFetch
的结果,但这与往常一样。关于SO的讨论也更多。要解决您的问题,您可以使用以下三种选择:
Cartesian Product
SELECT distinct f from Factories f "
+ "LEFT JOIN FETCH f.machines "
+ "Left JOIN FETCH f.cities "
+ "where f.id=:id
SELECT distinct f from Factories f "
+ "LEFT JOIN FETCH f.machines "
+ "Left JOIN FETCH f.emails "
+ "where f.id=:id
@LazyCollection(LazyCollectionOption.FALSE)