[JAVA] 객체지향-일대다

Category: JAVA | March 10, 2017

다이어그램

  • 팀은 회원을 참조하지만 회원은 팀을 참조하지 않는다.
  • 일대다 보다는 다대일 양방향 매핑을 사용하는 것이 좋다.

Visual Paradigm

데이터 베이스 동기화

생성된 테이블 스키마는 다대일 테이블 구조와 동일하다.

코드 생성

Member 클래스는 Team 클래스의 레퍼런스를 참조하지 않는다.

import java.io.Serializable;
import javax.persistence.*;
@Entity
@org.hibernate.annotations.Proxy(lazy=false)
@Table(name="MEMBER")
public class Member implements Serializable {
    public Member() {
    }
    
    @Column(name="ID", nullable=false, length=11)   
    @Id 
    @GeneratedValue(generator="COM_SAMPLE_MEMBER_ID_GENERATOR") 
    @org.hibernate.annotations.GenericGenerator(name="COM_SAMPLE_MEMBER_ID_GENERATOR", strategy="native")   
    private Integer id;
    
    @Column(name="USERNAME", nullable=true, length=255) 
    private String userName;
    
    private void setId(int value) {
        setId(new Integer(value));
    }
    
    private void setId(Integer value) {
        this.id = value;
    }
    
    public Integer getId() {
        return id;
    }
    
    public Integer getORMID() {
        return getId();
    }
    
    public void setUserName(String value) {
        this.userName = value;
    }
    
    public String getUserName() {
        return userName;
    }
    
    public String toString() {
        return String.valueOf(getId());
    }
    
}

Team 클래스는 Member 클래스를 참조하고 있으며 Member 테이블의 외래키를 관리한다.(@JoinColumns({ @JoinColumn(name="TEAM_ID", nullable=true) })

따라서 연관 관계를 처리하기 위한 UPDATE SQL을 추가로 실행하게 된다.

import java.io.Serializable;
import javax.persistence.*;
@Entity
@org.hibernate.annotations.Proxy(lazy=false)
@Table(name="TEAM")
public class Team implements Serializable {
    public Team() {
    }
    
    private java.util.Set this_getSet (int key) {
        if (key == com.sample.ORMConstants.KEY_TEAM_MEMBER) {
            return ORM_member;
        }
        
        return null;
    }
    
    @Transient  
    org.orm.util.ORMAdapter _ormAdapter = new org.orm.util.AbstractORMAdapter() {
        public java.util.Set getSet(int key) {
            return this_getSet(key);
        }
        
    };
    
    @Column(name="ID", nullable=false, length=11)   
    @Id 
    @GeneratedValue(generator="COM_SAMPLE_TEAM_ID_GENERATOR")   
    @org.hibernate.annotations.GenericGenerator(name="COM_SAMPLE_TEAM_ID_GENERATOR", strategy="native") 
    private Integer id;
    
    @Column(name="NAME", nullable=true, length=255) 
    private String name;
    
    @OneToMany(targetEntity=com.sample.Member.class)    
    @org.hibernate.annotations.Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE, org.hibernate.annotations.CascadeType.LOCK}) 
    @JoinColumns({ @JoinColumn(name="TEAM_ID", nullable=true) })    
    @org.hibernate.annotations.LazyCollection(org.hibernate.annotations.LazyCollectionOption.TRUE)  
    private java.util.Set ORM_member = new java.util.HashSet();
    
    private void setId(int value) {
        setId(new Integer(value));
    }
    
    private void setId(Integer value) {
        this.id = value;
    }
    
    public Integer getId() {
        return id;
    }
    
    public Integer getORMID() {
        return getId();
    }
    
    public void setName(String value) {
        this.name = value;
    }
    
    public String getName() {
        return name;
    }
    
    private void setORM_Member(java.util.Set value) {
        this.ORM_member = value;
    }
    
    private java.util.Set getORM_Member() {
        return ORM_member;
    }
    
    @Transient  
    public final com.sample.MemberSetCollection member = new com.sample.MemberSetCollection(this, _ormAdapter, com.sample.ORMConstants.KEY_TEAM_MEMBER, com.sample.ORMConstants.KEY_MUL_ONE_TO_MANY);
    
    public String toString() {
        return String.valueOf(getId());
    }
    
}