Проблемы со структурой списка JPA - PullRequest
0 голосов
/ 31 октября 2018

Я работаю в проекте с использованием Spring Boot с JPA и у меня возникает проблема с методом findAll, особенно со структурой.

[
  {
    "idProducto": 5,
    "nombreProducto": "Perfil madera 2",
    "codProducto": 556,
    "proveedorProducto": {
      "idProveedor": 1,
      "rubro": "Maderas y tallados",
      "codProveedor": 2556
    },
    "tipoProducto": {
      "idTipoPro": 2,
      "descProducto": "Maderas"
    },
    "inventarioProducto": {
      "idInventario": 5,
      "stockInicial": 990,
      "stockCritico": 200,
      "fechaVencimiento": "2100-04-23",
      "precioVentaInv": 20000,
      "precioCompraInv": 10000,
      "fechaIngreso": "2018-04-23",
      "producto": 5
    }
  },
  {
    "idProducto": 6,
    "nombreProducto": "Perfil madera 4inch",
    "codProducto": 555,
    "proveedorProducto": 1,
    "tipoProducto": 2,
    "inventarioProducto": {
      "idInventario": 6,
      "stockInicial": 9997,
      "stockCritico": 200,
      "fechaVencimiento": "2100-04-23",
      "precioVentaInv": 25000,
      "precioCompraInv": 12000,
      "fechaIngreso": "2018-04-23",
      "producto": 6
    }
  }
]

Как вы можете видеть, первый продукт имеет правильную структуру, но во втором проблема заключается в объекте "tipoProducto" и объекте "productoProveedor", из которых я получаю только его идентификаторы, и я не знаю, почему я получить этот результат.

это моя классовая структура:

public class Producto implements Serializable {
  @Id
  @NotNull
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  @Column(name = "pro_id_producto")
  private int idProducto;
  @NotNull
  @Size(max = 45, message = "Máximo de 45")
  @Column(name = "pro_nombre_producto")
  private String nombreProducto;
  @NotNull
  @Column(name = "pro_codigo_producto")
  private int codProducto;
  @ManyToOne(fetch = FetchType.LAZY,optional = false)
  @JoinColumn(name = "pro_us_id_proveedor", referencedColumnName = "us_id_persona")
  private Proveedor proveedorProducto;

  @ManyToOne(fetch = FetchType.LAZY,optional = false)
  @JoinColumn(name = "pro_tp_id_tipo_producto", referencedColumnName = "pro_id_tipo_producto")
  private TipoProducto tipoProducto;

  @OneToOne(mappedBy = "producto",
      cascade = CascadeType.ALL,
      fetch = FetchType.LAZY, orphanRemoval = true)
  private Inventario inventarioProducto;
// getters and setters omited

это мой репо:

@Repository
public interface   ProductoRepository extends JpaRepository<Producto,Integer> {
  Producto getByCodProducto(int codPro);
  Boolean existsByCodProducto(int codPro);

}

и это мой уровень обслуживания:

@Service
public class ProductoService {
  @Autowired
  private ProductoRepository productoRepository;

  public List<Producto> getAllProductos(){
   return productoRepository.findAll();
  }

  public Producto getProducto(int idPro)throws EntityNotFoundException{
    Producto producto = productoRepository.getOne(idPro);
    if (producto == null){
      throw  new EntityNotFoundException(Producto.class,"idProducto", Integer.toString(idPro));
    }
    return producto;
  }
  public void saveProducto(Producto producto){
    productoRepository.save(producto);
  }
  public Producto getProductoByCod(int codPro) throws  EntityNotFoundException{
    Producto producto = productoRepository.getByCodProducto(codPro);
    if (producto == null){
      throw new EntityNotFoundException(Producto.class,"codProducto", Integer.toString(codPro));
    }
    return producto;
  }
  public boolean deleteProducto(int id)throws EntityNotFoundException{
    Producto producto = productoRepository.getOne(id);
    if (producto == null){
      throw  new EntityNotFoundException(Producto.class,"idProducto",Integer.toString(id));
    }else {
      productoRepository.deleteById(id);
      return true;
    }
  }
  public boolean existeProducto(int cod){
    return productoRepository.existsByCodProducto(cod);
  }

Не знаю, если это проблема с отображением или что-то еще. любая помощь будет отличной. потому что я искал ответ везде. П.С .: Я новичок в этом мире.

1 Ответ

0 голосов
/ 01 ноября 2018

Это поведение воспроизводится, потому что когда вы устанавливаете тип выборки в Lazy Hibernate, он не будет сильно сохраняться. Поэтому вам нужно изменить на Eager, в который будут загружены все отношения, связанные с конкретным объектом.

    @ManyToOne(fetch = FetchType.EAGER, optional = false)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...