Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Persistir dados não primitivos no JPA


OK aqui vai,

Estou assumindo que você está construindo seu aplicativo com Spring Boot, Hibernate como seu ORM e provavelmente algum tipo de banco de dados relacional (MySQL).

Em relação ao design do banco de dados:

Sim, o objeto Patreon aqui é a entidade proprietária com uma relação OneToMany com a entidade Item (já que um Patreon pode ter N objetos). Sua entidade Patreon pode fazer o seguinte redesenho:

1) Tente usar tipos não primitivos especialmente para chaves de tabela (long id -> Long id).

2) Perca o array de checkOutItems, bem como a lista itemHistory. Em primeiro lugar, as relações devem ser modeladas usando coleções e não arrays. Em segundo lugar, você não precisa desses dois. Você nunca armazenará os checkOutItems nem o itemHistory dessa maneira. Em vez disso, crie um List<Item> items que armazenará os itens do Patreon enquanto descreve a relação (aqui estão alguns exemplos:http:/ /www.baeldung.com/hibernate-one-to-many )

3) Novamente com a entidade Item você precisa perder o array do histórico. A única coisa que você precisa é uma referência à entidade proprietária (Patreon neste caso), completando assim o lado MuitosParaUm da relação.

4) Observe que os campos Data devem ser anotados com @Temporal também fornecendo o tipo correto (você pode ler mais).

5) A classe de itens em geral deve ser reformulada.

5) Depois que todos os itens acima estiverem em vigor e assumindo que você está usando Spring, você pode criar um Repositório com o qual você pode consultar um objeto Patreon, recuperando assim um objeto junto com suas entidades relacionadas (Itens).

Sobre suas dúvidas:

Q1:Sim, veja. Veja acima para mais.

Q1.2:Nenhuma matriz não é. Listas ou melhor ainda Conjuntos são mais adequados.

Q1.3:Sim, existe. A primeira uma anotação JPA usada em bancos de dados relacionais enquanto a segunda é uma anotação específica Spring Data usada por bancos de dados e frameworks que não são desse tipo (relacionais) ou não possuem uma API de persistência padrão definida (como JPA). Pois o NonNull e NotNull são aproximadamente os mesmos com o primeiro superdefinindo o último (algo que é feito com frequência). A única diferença que vejo é o alvo. Você pode ler mais aqui:https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/lang/NonNull.html https://docs.oracle.com/javaee /7/api/javax/validation/constraints/NotNull.html

Q2:Sim, existe. Veja acima.

Q3:Com um pouco de design inteligente, não vejo necessidade de mais, mas se você acha que vai te ajudar, por que não. Só não exagere no design e é complexidade