Java JPA在查询时复制了寄存器
MyJava JPA在查询时复制了寄存器,java,hibernate,jpa,duplicates,Java,Hibernate,Jpa,Duplicates,MyEmpresa实体有两个这样映射的嵌套集合: @ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST}) @JoinTable( name = "bandeiras_aceitas", joinColumns = {@JoinColumn(name = "empresa_id", nullable = false)}, inverseJoinColumns = {@
Empresa
实体有两个这样映射的嵌套集合:
@ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST})
@JoinTable(
name = "bandeiras_aceitas",
joinColumns = {@JoinColumn(name = "empresa_id", nullable = false)},
inverseJoinColumns = {@JoinColumn(name = "bandeira_id", nullable = false)})
private List<BandeiraCartao> bandeirasAceitas;
@OneToMany(fetch = FetchType.EAGER, cascade = {CascadeType.ALL},
mappedBy = "empresa")
private List<HorarioAtendimento> horariosAtendimento;
@ManyToMany(fetch=FetchType.EAGER,cascade={CascadeType.PERSIST})
@可接合(
name=“bandeiras_aceitas”,
joinColumns={@JoinColumn(name=“empresa_id”,nullable=false)},
inverseJoinColumns={@JoinColumn(name=“bandeira\u id”,nullable=false)})
私人名单:班德拉塞塔斯;
@OneToMany(fetch=FetchType.EAGER,cascade={CascadeType.ALL},
mappedBy=“empresa”)
私人名单horariosAtendimento;
实际上,我在
horariosAtendimento
上有12条记录,在bandeirasAceitas
中只有一条记录是我试图获取的Empresa
的记录。但是,当我使用我的find
方法时,'bandeirasAceitas'中有12条记录,问题是jpa(hibernate)生成的sql复制了这些记录,如(horariosAtendimento
*bandeirasAceitas上的记录数)。如何解决此问题?请仔细检查数据库内容。它不能像你描述的那样。对不起,我在问之前已经做过了:(您可能会看到生成的sql和联接表,因此结果集将包括多个具有相同内容的行,这些行用于empresa、banderiaCartao,但不同的Horarioatendicato,但这些结果行在装箱empresa时会折叠,因此您的列表中不能有重复的banderiaCartao。您实际上有12个不同的对象吗Bandeiraceartao在您的aceitas列表中?每个都有相同的id和内容?事实上这是不可能的。您是否覆盖了实体上的equal方法?@MarcosJ.CKichel hibernate不会这样做。可能只是Bandeiraceatas中有重复的条目,原因是您正在使用列表,因此无论何时添加新的Bandeiraceitas,都会进行预处理以前的数据也出现在同一个列表中,只更新同一个列表我明白你们说的,我可能在这里做了一些非常错误的事情,但我可以承认在bandeirasAceitas中只有一个条目,而且我有点习惯于冬眠,是什么让这更奇怪,反正我明天要切换到一个集合,这样我就可以测试了,我它不应该起作用。