Получение большего количества данных, чем ожидалось - PullRequest
0 голосов
/ 21 апреля 2020

(у этого вопроса есть версия на испанском sh: Pregunta español StackOverflow )

Здравствуйте,

Я создаю API-REST с помощью Springboot, Hibernate .. В одном контроллере, который я возвращаю одну сущность, смысл в том, что когда я делаю это:

 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;

Есть ли шанс, что вы знаете, почему это происходит?

Вот как должна вернуть объект компания:

enter image description here

И вот как я на самом деле получаю это:

enter image description here

Отсюда, вниз, это то, что спрашивается в комментариях

Это мой пользовательский объект:

  @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);
}

1 Ответ

0 голосов
/ 22 апреля 2020

решено

Мне пришлось изменить список пользователей с List<Usuario> на Set<Usuario>.

В любом случае, я понимаю, почему это исправляет это с помощью набора (причина не пусть в нем дублируются значения). В любом случае, если бы кто-нибудь попытался объяснить, почему в первый момент я 6 раз продублировал каждый элемент в списке, я бы оценил его. Спасибо !! : D

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...