Ricerca…


Parametri

Annotazione Scopo
@TableGenerator Specifica il nome del generatore e il nome della tabella in cui è possibile trovare il generatore
@GeneratedValue Specifica la strategia di generazione e si riferisce al nome del generatore
@Uno a uno Specifica la relazione uno a uno tra impiegato e desk, qui il Dipendente è il proprietario della relazione
mappedBy Questo elemento è fornito sul retro della relazione. Questo abilita la relazione bidirezionale

Relazione One to One tra impiegato e desk

Considera una relazione bidirezionale tra dipendente e scrivania.

Employee.java

@Entity
public class Employee {

    @TableGenerator(name = "employee_gen", table = "id_gen", pkColumnName = "gen_name", valueColumnName = "gen_val", allocationSize = 100)
    @Id
    @GeneratedValue(strategy = GenerationType.TABLE, generator = "employee_gen")
    private int idemployee;
    private String firstname;
    private String lastname;
    private String email;

    @OneToOne
    @JoinColumn(name = "iddesk")
    private Desk desk;

    // getters and setters    
}

Desk.java

@Entity
public class Desk {

    @TableGenerator(table = "id_gen", name = "desk_gen", pkColumnName = "gen_name", valueColumnName = "gen_value", allocationSize = 1)
    @Id
    @GeneratedValue(strategy = GenerationType.TABLE, generator = "desk_gen")
    private int iddesk;
    private int number;
    private String location;
    @OneToOne(mappedBy = "desk")
    private Employee employee;

    // getters and setters    
}

Codice di prova

/* Create EntityManagerFactory */
    EntityManagerFactory emf = Persistence
            .createEntityManagerFactory("JPAExamples");

    /* Create EntityManager */
    EntityManager em = emf.createEntityManager();

    Employee employee;

    employee = new Employee();
    employee.setFirstname("pranil");
    employee.setLastname("gilda");
    employee.setEmail("sdfsdf");

    Desk desk = em.find(Desk.class, 1); // retrieves desk from database
    employee.setDesk(desk);

    em.persist(employee);

    desk = em.find(Desk.class, 1); // retrieves desk from database
    desk.setEmployee(employee);
    System.out.println(desk.getEmployee());

Il diagramma del database è illustrato come di seguito. inserisci la descrizione dell'immagine qui

  • L'annotazione @JoinColumn continua sulla mappatura dell'entità che è mappata alla tabella che contiene il join colulmn. Il proprietario della relazione. Nel nostro caso, la tabella Employee ha la colonna join in modo che @JoinColumn sia nel campo Desk dell'entità Employee.
  • L'elemento mappedBy deve essere specificato nell'associazione @OneToOne nell'entità sul lato opposto della relazione. cioè L'entità che non fornisce la colonna di join sull'aspetto del database. Nel nostro caso, Desk è l'entità inversa.

L'esempio completo può essere trovato qui



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow