sql >> Databasteknik >  >> RDS >> Mysql

Bevara icke-primitiva data i JPA

Okej nu,

Jag antar att du bygger din applikation med Spring Boot, Hibernate som din ORM och förmodligen någon sorts eller relationsdatabas (MySQL).

Angående db design:

Ja, Patreon-objektet här är den ägande entiteten med en OneToMany-relation till Item-entiteten (eftersom en Patreon kan ha N objekt). Din Patreon-entitet skulle kunna göra med följande omdesign:

1) Försök att använda icke-primitiva typer speciellt för tabellnycklar (långt id -> långt id).

2) Förlora arrayen av checkedOutItems såväl som itemHistory-listan. Först och främst bör relationer modelleras med hjälp av samlingar och inte arrayer. För det andra behöver du inte dessa två. Du kommer aldrig att lagra checkedOutItems eller itemHistory på detta sätt. Skapa istället en List<Item> items som kommer att lagra Patreon-objekten samtidigt som relationen beskrivs (här är några exempel:http:/ /www.baeldung.com/hibernate-one-to-many )

3) Återigen med objektentiteten måste du förlora historiken. Det enda du behöver där är en referens till den ägande enheten (Patreon i det här fallet) och därmed kompletterar ManyToOne-sidan av relationen.

4) Observera att datumfält ska noteras med @Temporal ger också rätt typ (du kan läsa mer).

5) Objektklass i allmänhet bör göra med en omdesign.

5) När allt ovan är på plats och förutsatt att du använder Spring, kan du skapa ett arkiv med vilket du kan fråga ett Patreon-objekt och på så sätt hämta ett objekt tillsammans med dess relaterade enheter (objekt).

Angående dina frågor:

F1:Ja, det ser du. Se ovan för mer.

Q1.2:Inga arrayer är det inte. Listor eller ännu bättre Set är mer lämpade.

F1.3:Ja det finns det. Den första är en JPA-anteckning som används i relationsdatabaser medan den andra är Spring Data-specifik anteckning som används av databaser och ramverk som inte är av denna typ (relationella) eller som inte har ett standardbeständighets-API definierat (som JPA). För NonNull och NotNull är ungefär samma sak med förstastenen som faktiskt översätter den senare (något som görs ofta). Den enda skillnaden jag ser är målet. Du kan läsa mer här: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

F2:Ja det finns det. Se ovan.

F3:Med lite smart design ser jag inte behovet av mer, men om du känner att det kommer att hjälpa dig, varför inte. Överdriv bara inte designen och dess komplexitet



  1. mariadb-kontakt J Aurora Snabb implementering av failover

  2. Hur man skapar en användare/databas i skript för Docker Postgres

  3. Visa hela SQL-frågan i Show Processlist för MySQL

  4. MySQL-variabel `max_allowed_packet` återställs automatiskt till 1MB