Recherche…


Paramètres

Annotation Objectif
@TableGenerator Spécifie le nom du générateur et le nom de la table où le générateur peut être trouvé
@GeneratedValue Spécifie la stratégie de génération et fait référence au nom du générateur
@Un par un Spécifie une relation individuelle entre l'employé et le bureau, ici l'employé est le propriétaire de la relation
mappéPar Cet élément est fourni au verso de la relation. Cela permet une relation bidirectionnelle

One To One relation entre employé et bureau

Considérez une relation bidirectionnelle entre l’employé et le bureau.

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    
}

Code de test

/* 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());

Le schéma de base de données est représenté ci-dessous. entrer la description de l'image ici

  • L'annotation @JoinColumn passe au mappage de l'entité mappée sur la table contenant la jointure colulmn.Le propriétaire de la relation. Dans notre cas, la table Employee a la colonne join pour que @JoinColumn soit sur le champ Desk de l'entité Employee.
  • L'élément mappedBy doit être spécifié dans l'association @OneToOne dans l'entité à l'envers de la relation. C'est-à-dire l'entité qui ne fournit pas de colonne de jointure dans l'aspect base de données. Dans notre cas, Desk est l'entité inverse.

Un exemple complet peut être trouvé ici



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow