(这个问题有西类牙语版本: Pregunta español StackOverflow )
你好,
我使用 springboot、hibernate 创建 API-REST ... 在一个 Controller 中,我返回一个实体,重点是,当我这样做时:
Empresa company= empresaManager.findById(2L);
return company;
返回的正是我所期望的,(目标公司有一份学生名单,并且只有 2 名学生)。
但是当我不使用数字时,我所做的是获取学生,然后返回学生的公司,返回我的公司有 12 个学生(每个学生重复 6 次)
String token = request.getHeader("Authorization");
token = token.replace("Bearer ", "");
Usuario usuario = tokenManager.getUsuarioFromToken(token);
Long id = usuario.getEmpresa().getIdempresa();
Empresa empresaOriginal = empresaManager.findById(id);
return empresaOriginal;
您知道为什么会发生这种情况吗?
这是应该如何返回对象公司:
这就是我实际得到它的方式:
从这里到下,是评论中所要求的
这是我的用户实体:
@Entity
@Table(name = "usuario")
public class Usuario {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "idusuario")
private Long idusuario;
@Column(name = "nombre", length = 30, nullable = false)
private String nombre;
@Column(name = "email", length = 80, nullable = false)
private String email;
@JsonIgnore
@Column(name = "contraseña", length = 300, nullable = false)
private String contraseña;
@JsonIgnore
@ManyToOne
@JoinColumn(foreignKey = @ForeignKey(name = "empresa_idempresa"), name = "empresa_idempresa")
private Empresa empresa;
@OneToMany(mappedBy = "usuario", orphanRemoval = true, fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private List<Fichaje> fichajes;
public Usuario() {
}
public Empresa getEmpresa() {
return empresa;
}
public void setEmpresa(Empresa empresa) {
this.empresa = empresa;
}
}
这是我的公司实体:
@Entity
@Table(name = "empresa")
public class Empresa {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "idempresa")
private Long idempresa;
@Column(name = "nombre", length = 100, nullable = false)
private String nombre;
@Column(name = "contacto", length = 300, nullable = false)
private String contacto;
@Column(name = "fecha_inicio_practicas", columnDefinition = "DATE")
private LocalDate inicioPracticas;
@Column(name = "direccion", length = 100)
private String direccion;
@Column(name = "foto_empresa")
private String fotoEmpresa;
@OneToMany(mappedBy = "empresa", orphanRemoval = true, cascade = CascadeType.ALL)
private List<EmpresaTieneDia> empresaTieneDias;
@OneToMany(mappedBy = "empresa", orphanRemoval = false, fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private List<Usuario> estudiantes;
public Empresa() {
}
public Long getIdempresa() {
return idempresa;
}
public void setIdempresa(Long idempresa) {
this.idempresa = idempresa;
}
public List<Usuario> getEstudiantes() {
return estudiantes;
}
public void setEstudiantes(List<Usuario> estudiantes) {
this.estudiantes = estudiantes;
}
}
这是 findById: (服务或经理)
public Empresa findById(Long id) {
return this.empresaRepository.findByIdempresa(id);
}
(存储库或 DAO)
public interface EmpresaRepository extends CrudRepository<Empresa, Long> {
Empresa findByIdempresa(Long id);
}
最佳答案
已解决
我必须将我的用户列表从 List<Usuario>
更改为到 Set<Usuario>
.
无论如何,我明白为什么它使用 Set 来修复它(因为它不允许重复的值)。 不管怎样,如果有人能尝试解释我为什么在第一时间就将列表中的每个项目重复 6 次,我将不胜感激。 谢谢 !! :D
关于java - 收到的数据比预期多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61345868/