ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JPA 2.0] OneToMany 설정하기
    개발 2014. 9. 30. 10:10
    반응형

    고맙게도 JPA에서 조인을 지원해준다.


    일단, USER 테이블, ROLE 테이블이 존재할때 관계를 생각하고...


    아래와 같이 정의하면된다. 조인 테이블을 사용할지 안할지는 잘 생각해보고 이용하면 될듯.



    @Entity

    @Table

    public class User implements Serializable {

    @Id

    @Column(name = "USER_ID")

    private String id;

    @Column(name = "USER_PASSWORD")

    private String password;

    @Column(name = "USER_NAME")

    private String name;

    @Column(name = "USER_EMAIL")

    private String email;

    @Column(name = "USER_MOBILE")

    private String mobile;

    /* Role 클래스에 User 멤버명을 지정한다.

    @OneToMany(mappedBy = "user", fetch = FetchType.EAGER)

    */

    /* 릴레이션 관계가 있는 각 테이블의 컬럼 명을 지정한다.

    @OneToMany(fetch = FetchType.EAGER)

    @JoinColumn(name="USER_ID", referencedColumnName="USER_ID")

    */

            /* 조인 테이블을 지정하고 릴레이션 관계가 있는 각 테이블의 컬럼을 지정한다.

    */

    @OneToMany(fetch = FetchType.EAGER)

    @JoinTable(name = "AUTHORITIES", joinColumns = { @JoinColumn(name = "USER_ID", referencedColumnName = "USER_ID") }, inverseJoinColumns = { @JoinColumn(name = "ROLE_ID", referencedColumnName = "ROLE_ID", unique = true) })

    private Set<Role> roles;


    @Entity

    @Table(name = "SFT_ROLES")

    public class Role extends AbstractDomain implements Serializable {

    @Id

    @Column(name = "ROLE_ID")

    private String id;

    @Column(name = "ROLE_NAME")

    private String name;

    @Column(name = "TARGET_ID")

    private String targetId;

    @Column(name = "ROLE_TYPE")

    private String roleType;

    @Column(name = "ROLE_DESC")

    private String roleDesc;

    @Column(name = "GROUP_ID")

    private String groupId;

    /* mappedBy 로 지정을 하면 필요함.

    @ManyToOne(fetch = FetchType.LAZY)

    @JoinColumn(name = "USER_ID")

    private User user;

    */

    }


    조인 테이블은 지정할 수도 있고 자동생성 되도록 놔둬도 된다.

    참고로 조인되는 필드의 경우 @Id로 지정된 모든 필드가 조인 테이블에 존재해야한다.

    @Entity

    @Table

    public class Authorities implements Serializable {


    @Id

    @Column(name = "USER_ID")

    private String userId;

    @Id

    @Column(name = "ROLE_ID")

    private String roleId;


    } 



    @OneToMany(mappedBy = "user", fetch = FetchType.EAGER)

    참조) http://en.wikibooks.org/wiki/Java_Persistence/OneToMany#Example_of_a_JPA_2.0_unidirectional_OneToMany_relationship_database


    반응형
Designed by Tistory.