JPA Flashcards
Notazione @Basic cosa significa?
@Basic diciamo che si tratta di una colonna di un database se poi desideriamo specificare se obbligatorio @Basic(optional=false)
notazione @Id
@Id identifica il campo chiave
notazione @Column
Tale notazione viene utilizzata per identificare il nome di una colonna @Column(name=”Citta”) altri attributi sono:
nullable=true/false
unique=true/false
length=
@Column(name = “username”, nullable = false, unique = true, length = 50)
la notazione @GeneratedValue
@GeneratedValue viene utilizzata per stabilire e specificare la strategia di generazione dei valori per i campi chiave primaria di un’entità.
la notazione @GeneratedValue(strategy = GenerationType.AUTO)
sceglierà automaticamente la strategia di generazione basandosi sulle capacità del database.
@GeneratedValue(strategy = GenerationType.IDENTITY)
il database sarà responsabile della generazione dei valori per l’ID usando una colonna auto-incrementata.
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = “user_seq”)
In questo esempio, viene utilizzata una sequenza chiamata “user_sequence” per generare i valori dell’ID
Cosa significa tabella dizionario?
Sono quelle tabelle che non vengono modificate
Nella Notazione OneToMany quali sono le 4 PROPRIETA?
fetch
cascade=
mappedBy=
otphanRemoval=
Nella Notazione OneToMany(fetch=FetchType.Eager) che significa?
@OneToMany(fetch = FetchType.EAGER) è una configurazione che forza il caricamento immediato delle entità correlate, quando si carica un’entità padre. Questo può semplificare l’accesso ai dati correlati.
nella notazione @OneToMany( cascade=CascateType.ALL
viene utilizzata per specificare che le operazioni di persistenza effettuate sull’entità padre devono essere propagate alle entità figlio.
nella notazione @OneToMany( mappedBy=”promo”
In altre parole, mappedBy contiene il nome della Variabile definita nella tabella di destinazione. Il tipo variabile è di tipo della tabella di partenza.Dall esempio andiamo a settare mappedBy=”promo” (che vive dentro alla classe PROMO) . Dentro la classe DETTPROMO scriviamo una variabile così definita: private Promo promo; Attenzione!! la variabile deve essere deve essere con la notazione @ManyToOne
private Promo promo
@OneToMany(orphanRemoval=true)
L’uso di orphanRemoval = true in una relazione @OneToMany consente di semplificare la gestione delle entità figlio, assicurando che le entità figlio “orfane” vengano rimosse automaticamente dal database quando non sono più referenziate dall’entità padre.
nella notazione:
@ManyToOne
@JoinColumn(name=”IDPROMO”,referenceColumnName=”idPromo”) cosa significa?
@JoinColumn(name = “IDPROMO”, referencedColumnName = “idPromo”):
name: Specifica il nome della colonna nella tabella corrente che
funge da chiave esterna.
referencedColumnName: Specifica il nome della colonna nella
tabella dell’entità di destinazione a cui la chiave esterna fa
riferimento.
cosa è la @JsonManagedReference e la @JsonBackReference ?
@JsonManagedReference e @JsonBackReference sono annotazioni fornite dalla libreria Jackson per la serializzazione/deserializzazione JSON in Java. Vengono utilizzate per gestire correttamente le relazioni bidirezionali tra entità e prevenire problemi di ricorsione infinita durante la serializzazione JSON.
Cosa signigfica @Basic(optional = false)?
Significa che non può assumere valori negativi
cosa significa la notazione @GeneratedValue(strategy = GenerationType.IDENTITY)
Significa che vengono generati gli indici incrementali automaticamente e si usa nelle colonne che devono funzionare come chiavi
per identificare l’ interfaccia di repository quale notazione usare?
@Repository
Quale interfaccia estende?
extends JpaRepository<classe,tipo chiave primaria>
Nelle relazioni Molti ad Uno come ovviare ad un problema ricorrente?
aggiungendo: @EqualsAndHashCode.Exclude
All’ interno della cartella service che tipo di files vanno inseriti?
Una Interfaccia e la sua classe di implementazione. La classe di implementazione deve fare @Autowired della classe di repository deve implementare la classe di repository. Ed utilizzare le notazioni @Service e @Transactional.
Quale è la caratteristica del interfaccia di repository
Estende la JpaRepository<Libro,Long> e scrive i metodi per operare sul database.
Nella interfaccia Repository quando dobbiamo scrivere una query nella notazione @Query quali sono i due metodi FONDAMENTALI da inserire all interno delle parentesi tonde? @Query()
@Query(value=””, nativeQuery = true)
dentro al file di properties per la connessione del database quali sono i settaggi principali?
Inseriamo il numero della porta
server.port = 8091
spring.datasource.url=
spring.datasource.driver-class-name=
spring.datasource.username=
spring.datasource.password=
spring.jpa.properties.hibernate.dialect=
spring.jpa.hibernate.ddl-auto=update
L’ interfaccia di repository quale è la sua struttura?
Notazione @Repository
extends JpaRepository dove all interno delle parentesi angolari inseriamo <Nome Entity,Indice dell Entity> es: implements JpaRepository<Libro,Long>
come si progetta un applicativo Spring Boot
Si genera :
* Entity
* Repository
* Service
* Controller
Quali sono le notazioni principali dell Entity?
@Entity
@Table(name=””)
@Data
Quali sono le notazioni principali del Repository?
Si tratta di una interfaccia
@Repository
devi estendere JpaRepository<T,ID>
Quali sono le notazioni principali dell Service?
Il service è costituito dall interfaccia e la sua classe di implementazione
Nella classe di implementazione devi aggiungere :
@Service
@Transactional
@Autowired (Con il repository)
Quali sono le notazioni principali del Controller?
@RestController
@RequestMapping
@Autowired(con il service)
Scrivi un metodo del controller di tipo @GetMapping dove accoglie un valore dal client di tipo Long e restituisce ResponseEntity<Libro></Libro>
@GetMapping(value=”/libro/{idLibro}”,produces=”application/json”)
public ResponseEntity<Libro>readId(@PathVariable("idLibro") Long idLibro){
Libro libro=dettLibroService.findByIdLibro(idLibro);
return new ResponseEntity<Libro>(libro,HttpStatus.OK);
}</Libro></Libro>
Quale è il vantaggio di usare il Jpql?
Il jpql è universale e lo possiamo adottare su qualsiasi tipo di DB , Utilizzare JPQL tramite JPA offre vantaggi significativi in termini di sicurezza rispetto alla concatenazione di stringhe SQL per formare query dinamiche. JPQL supporta i parametri nominati e posizionali, che possono essere utilizzati per evitare SQL injection e migliorare la sicurezza complessiva delle applicazioni.
Con Jpa quale metodo viene utilizzato per inserire o modificare indistintamente?
.saveAndFlush(T);
Se dobbiamo fare delle operazioni di modifica es : Insert o delete che tipo di metodo dobbiamo utilizzare?
Nel caso di modifica del database dobbiamo utilizzare un metodo ti tipo POST
Cosa è HttpHeaders?
è una classe di Spring che viene utilizzata per manipolare l’ intestazione HTTP
Scrivi un metodo di tipo Post dove inserisce un oggetto di tipo Libro
@PostMapping(value=”/inserisci”)
public ResponseEntity<Libro> insLibroFromPost(@RequestBody Libro libro){
dettLibroService.insLibro(libro);
return new ResponseEntity<Libro>(new HttpHeaders(),HttpStatus.CREATED);
}</Libro></Libro>