sql >> Base de Datos >  >> RDS >> Mysql

Persistir datos no primitivos en JPA

Bien, aquí va,

Supongo que está creando su aplicación con Spring Boot, Hibernate como su ORM y probablemente algún tipo de base de datos relacional (MySQL).

Con respecto al diseño de la base de datos:

Sí, el objeto Patreon aquí es la entidad propietaria con una relación OneToMany con la entidad Item (ya que un Patreon puede tener N objetos). A su entidad Patreon le vendría bien el siguiente rediseño:

1) Trate de usar tipos no primitivos, especialmente para las claves de la tabla (identificación larga -> Identificación larga).

2) Perder la matriz de CheckOutItems así como la lista itemHistory. En primer lugar, las relaciones deben modelarse utilizando colecciones y no matrices. En segundo lugar, no necesita esos dos. Nunca almacenará los elementos verificados ni el historial de elementos de esta manera. En su lugar, cree una List<Item> items que almacenará los elementos de Patreon mientras describe la relación (aquí hay algunos ejemplos:http:/ /www.baeldung.com/hibernate-one-to-many )

3) Nuevamente con la entidad Item, debe perder la matriz de historial. Lo único que necesita allí es una referencia a la entidad propietaria (Patreon en este caso), completando así el lado ManyToOne de la relación.

4) Tenga en cuenta que los campos de fecha deben anotarse con @Temporal también proporciona el tipo correcto (puede leer más).

5) La clase de artículo en general debería funcionar con un rediseño.

5) Después de que todo lo anterior esté en su lugar y asumiendo que está usando Spring, puede crear un Repositorio con el que puede consultar un objeto Patreon recuperando así un objeto junto con sus entidades relacionadas (Artículos).

Con respecto a sus preguntas:

P1:Sí, lo ves. Consulte más arriba para obtener más información.

Q1.2:No hay matrices no lo son. Las listas o, mejor aún, los conjuntos son más adecuados.

P1.3:Sí, lo hay. La primera es una anotación JPA utilizada en bases de datos relacionales, mientras que la segunda es una anotación específica de Spring Data utilizada por bases de datos y marcos que no son de este tipo (relacionales) o no tienen una API de persistencia estándar definida (como JPA). Porque NonNull y NotNull son más o menos lo mismo con el primero superponiendo al último (algo que se hace a menudo). La única diferencia que veo es el objetivo. Puede leer más aquí: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

P2:Sí, lo hay. Ver arriba.

P3:Con un poco de diseño inteligente, no veo la necesidad de más, pero bueno, si crees que te ayudará, ¿por qué no? Simplemente no exageres con el diseño y su complejidad