Mas tenho uma dúvida: o seu modelo de negócio realmente precisa de herança?
Na verdade não, meu conhecimento ainda é bem limitado, por isso me pareceu o melhor caminho.
Tentei fazer agora por composição, apesar de fazer total sentido, não havia pensado nisso até lembrar que o Deschamps falou tocou no assunto em um dos vídeos que assiste a alguns meses. Lembrei do termo logo depois que te respondi e fui ler sobre o conceito.
Usei, deu um erro na hora de subir a aplicação:
Could not determine recommended JdbcType for Java type 'dev.tadeupinheiro.apistockinputspringboot.models.ArticleModel
Não sei significa alguma coisa sem ter as classes da aplicação para entender, mas enfim, mesmo que eu consiga resolver esse erro, não acho que seria performático, salvar todas as classes em cada registro que eu fizer no db.
Vamos lá, vou tentar explicar como funciona o negócio:
Existe os ARTIGOS, que seríam os "modelos" do produto. Exemplo: Existe o artigo chamado UNIPACIFIC, que é um tipo de tecido, que tem seus atributos (nome, peso, fabricante e composição), ele não vai ser alterado, vai ser cadastro e fica lá, eventualmente se cadastraria outros artigos, mas seria em outro métodos, essa parte seria "fácil".
Existe também as CORES, o artigo UNIPACIFIC tem sua paleta de cores, que serve para ele a para outros artigos também. Se encaixa no mesmo esquema: eventualmente se cadastria outros mas não é o centro da api no momento.
Por fim, existe o ROLO, que é o ponto central aqui.
O rolo possui o número(que seria o ID dele), possui tamanho, qualidade, tratamento, preço de custo e etc.
A questão é que o rolo não se repete e não seria extendido por nenhuma outra classe. Terá a entrada no banco de dados e na venda teria a saída e o id não se repete.
Mas o rolo também terá o artigo e seus atributos e a cor e seus atributos, exemplo:
Número do rolo: 156879 (primary key)
Tamanho: 100m
Preço de custo: 19,00
Artigo: Unipacific
Fabricante: Satanense
(demais atributos do artigo)
Código da cor: 5890
Cor: Azul
Então a minha intenção seria:
Salvar o rolo e seus atributos na tabela: TB_PRODUCTS_IN_STOCK, e nele ter a coluna de chave estrangeira fazendo referência para o artigo e a cor. Não salvando a classe completa dentro da tabela como seria na composição. Seria somente a referência e na hora de puxar o relatório puxar pela chave.
Caso faça diferença e possa dar uma olhada:
Repositório GITHUB:
https://github.com/tadeupinheiro/api-stock-input-spring-boot/tree/Using-composition/src/main/java/dev/tadeupinheiro/apistockinputspringboot
Está na branch: Using-Composition