Mappare Entity con chiave primaria composta

di il
5 risposte

Mappare Entity con chiave primaria composta

Come da titolo,
ho una tabella con chiave primaria composta (codice utente e mail), lato codice come ci si comporta in questi casi, si mappano entrambe le proprietà con id?

Ed il saveAll di jpa come si comporta in questi casi? Come se fosse una normale chiave primaria, quindi vede se c'è record con entrambi i campi valorizzati in quel modo, se ci sono eventualmente aggiorna, mentre se non ci sono o se solo uno dei due presente fà nuova insert?

5 Risposte

  • Re: Mappare Entity con chiave primaria composta

    Test90 ha scritto:


    ho una tabella con chiave primaria composta (codice utente e mail), lato codice come ci si comporta in questi casi, si mappano entrambe le proprietà con id?
    Per le chiavi primarie composite ci sono due opzioni: usare @IdClass oppure @EmbeddedId. Se vuoi che nella tua entity ci siano più @Id, allora va usato @IdClass. E' un po' lungo da spiegare, cerca in rete.
  • Re: Mappare Entity con chiave primaria composta

    andbin ha scritto:


    Per le chiavi primarie composite ci sono due opzioni: usare @IdClass oppure @EmbeddedId. Se vuoi che nella tua entity ci siano più @Id, allora va usato @IdClass. E' un po' lungo da spiegare, cerca in rete.
    Da quanto ho capito,
    si crea una classe a parte che mappa le due colonne che fungono da chiave composta, annotandolo con @Embeddable, costruttore, annotation a mappare le colonne, e la si riporta nella classe principale
    @Embeddable
    public class MyPk implements Serializable {
    
        @Column(name = "nome")
        private String nome;
    
        @Column(name = "cognome")
        private String cognome;
    
        public myPk () {
        }
    
        public myPk (String nome, String cognome) {
            this.nome= nome;
            this.codiceSoc = cognome;
        }
    Mentre nella entity:
    @Entity
    @Table(name = "myTab", schema = "mySchema")
    public class Persona{
    
        @EmbeddedId
        private MyPk;
  • Re: Mappare Entity con chiave primaria composta

    Test90 ha scritto:


    si crea una classe a parte che mappa le due colonne che fungono da chiave composta, annotandolo con @Embeddable, costruttore, annotation a mappare le colonne, e la si riporta nella classe principale
    Questa è la seconda opzione.

    Se invece vuoi che nella TUA entity (es. Persona) ci siano più @Id, uno per ciascun field della chiave primaria, allora va usato @IdClass, non @EmbeddedId/@Embeddable.
  • Re: Mappare Entity con chiave primaria composta

    andbin ha scritto:



    Questa è la seconda opzione.

    Se invece vuoi che nella TUA entity (es. Persona) ci siano più @Id, uno per ciascun field della chiave primaria, allora va usato @IdClass, non @EmbeddedId/@Embeddable.
    Cosa si intende per più id? è una chiave composta da due campi del tipo nome+cognome
  • Re: Mappare Entity con chiave primaria composta

    Test90 ha scritto:


    Cosa si intende per più id? è una chiave composta da due campi del tipo nome+cognome
    Che nella TUA entity puoi mettere nome con @Id e anche cognome con @Id. MA se fai così devi usare @IdClass sulla entity per indicare il Class di una tua altra classe che rappresenta la chiave. E che deve avere delle caratteristiche ben precise.
Devi accedere o registrarti per scrivere nel forum
5 risposte