jpa 직원과 책상 간의 일대일 관계


직원과 책상 사이의 일대일 양방향 관계를 고려하십시오.

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    
}

테스트 코드

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

데이터베이스 다이어그램은 다음과 같습니다. 여기에 이미지 설명을 입력하십시오.

  • @JoinColumn 주석은 조인 colulmn을 포함하는 테이블로 맵핑되는 엔티티의 맵핑을 수행합니다. 관계 소유자. 여기서는 Employee 테이블에 조인 열이 있으므로 @JoinColumn 은 Employee 엔터티의 Desk 필드에 있습니다.
  • mappedBy 요소는 관계의 반대쪽 엔티티에서 @OneToOne 연관에 지정해야합니다. 즉 데이터베이스 측면에서 조인 열을 제공하지 않는 엔터티. 우리의 경우 Desk는 반대 엔티티입니다.

전체 예제는 여기 에서 찾을 수 있습니다 .