Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Criar um banco de dados com Jpa/Hibernate/Spring

Estou tentando criar uma API onde faço locações de itens por data e quantidade disponivel, porém já fiz de tudo e não consigo chegar a lugar nenhuma... Meu principal problema está no relacionamento/associação entre as tabelas de contratos onde deve ter os itens e quantidades separadas do estoque, pois o estoque só tem que diminuir na data do evento até a data do evento... Não consigo mandar o código pois exclui tudo, estou a procura de uma luz :D :(

Tabelas Cliente, Contrato(dentro do contrato tem que ter os itens alugados e unidades alugadas por ele sem afetar o estoque(afeta o estoque só nos dias alugados)), Itens, Categoria dos Itens. Necessito de um norte nessa questão.

1 resposta
solução!

Olá, Lucas

O JPA/Hibernate permite que você crie relações entre suas entidades de maneira bastante flexível.

Vamos pensar em um exemplo prático considerando as entidades que você mencionou: Cliente, Contrato, Itens e Categoria dos Itens.

  1. Cliente: Esta é uma entidade simples que pode conter informações como nome, endereço, etc.

  2. Item: Esta entidade pode ter atributos como nome, descrição, quantidade em estoque e Categoria. A Categoria pode ser uma entidade separada com uma relação de muitos para um (ManyToOne) com Item.

  3. Contrato: Aqui as coisas ficam um pouco mais complexas. Você pode ter um relacionamento de muitos para um (ManyToOne) com Cliente, indicando que um Cliente pode ter vários Contratos. Além disso, você pode ter um relacionamento de muitos para muitos (ManyToMany) com Item, indicando que um Contrato pode ter vários Itens e um Item pode estar em vários Contratos. Para armazenar a quantidade de cada Item em um Contrato, você pode usar uma tabela de junção com uma coluna extra para a quantidade.

  4. Para controlar o estoque, você pode ter um atributo na entidade Item que armazena a quantidade atual em estoque. Cada vez que um Contrato é criado ou modificado, você atualiza essa quantidade. No entanto, essa atualização deve levar em conta a data do evento. Ou seja, o estoque só deve ser diminuído na data do evento.

Aqui está um exemplo simplificado de como as entidades poderiam ser mapeadas:

@Entity
public class Cliente {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String nome;
    // outros atributos...
}

@Entity
public class Categoria {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String nome;
    // outros atributos...
}

@Entity
public class Item {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String nome;
    private int quantidadeEmEstoque;
    
    @ManyToOne
    private Categoria categoria;
    // outros atributos...
}

@Entity
public class Contrato {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private LocalDate dataDoEvento;
    
    @ManyToOne
    private Cliente cliente;
    
    @ManyToMany
    @JoinTable(
        name = "contrato_item", 
        joinColumns = @JoinColumn(name = "contrato_id"), 
        inverseJoinColumns = @JoinColumn(name = "item_id")
    )
    private Map<Item, Integer> itens = new HashMap<>();
    // outros atributos...
}
``

Espero ter ajudado e bons estudos!