jpa
Mappatura One to One
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.
- 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