Hibernate 매 핑 관계 (주해 방식)

8798 단어 Hibernate
머리말
우선 이것 은 리 트 윗 블 로그 로 오리지널 에 속 하지 않 는 다 고 밝 혔 다.하지만 유용 하 다 고 느껴 져 본인 의 블 로그 에 기록 되 어 있 습 니 다.
Hibernate Annotation 관계 맵 은 다음 과 같은 몇 가지 유형 이 있 습 니 다.
일대일 키 연결 맵 (단 방향)
@OneToOne(cascade=CascadeType.ALL)

@JoinColumn(name="userid",unique=true)

/*           ,  @OneToOne,        。@JoinColum         userid(      ),     ,           + _id,        (unique)。*/

일대일 키 연결 맵 (양 방향)
Class 1 리 는 위 와 마찬가지 로 Class 2 에 대해:
@OneToOne(mappedBy="class2",cascade=CascadeType.ALL)


메모: mappedby = "class 2" 를 추가 해 야 합 니 다. 추가 하지 않 으 면 class 2 도 하나의 외부 키 (class 1 id) 를 생 성 합 니 다. mappedby = "class 2" 는 그 와 관련 된 대상 의 속성 을 가리 키 며 양 방향 관련 관계 에 있 고 한 끝 만 주체 (owner) 단 으로 존재 하 며 주체 단 은 연결 열 을 유지 해 야 합 니 다.이러한 관 계 를 유지 할 필요 가 없 는 종 표 는 mappedBy 속성 을 통 해 설명 합 니 다. mappedBy 의 값 은 주체 의 관련 속성 을 가리 키 고 있 습 니 다.
규칙: 양 방향 관련 관계 만 있 고 모두 mappedby 를 추가 합 니 다.
(끼 워 넣 기 대상) 구성 요소 맵
다른 유형 을 실체 류 의 일부분 으로 투사 한다. 예 를 들 어 사용자 의 교육 경력 은 사용자 표 에 완전히 의존 하지만 비교적 복잡 한 구조 가 있 으 면 Embedded 를 사용 할 수 있다.
주의:
  • 다른 실체 류 의 한 부서 가 되 는 클래스 는 @ Entity 실체 류 로 주석 하지 마 세 요!
  • @ Embedded 를 사용 하여 구성 요소 류 에 대한 설명 을 사용 합 니 다.
  • 구성 요소 속성 명 은 실체 류 속성 명 과 충돌 하지 않도록 다음 과 같은 주 해 를 사용 할 수 있 습 니 다.
  • @AttributeOverrides(
            {
                @AttributeOverride(name="xx",column=@Column(name="xxx")),
    
                @AttributeOverride(name="xx2",column=@Column(name="xxx2")),
    
            }
        )
    
    
  • 끼 워 넣 는 대상 에서 속성 을 @ column 으로 설정 합 니 다
  • 다음은 하나의 예 를 @ Element Collection 과 결합 하여 설명 합 니 다.
    @Entity
    public class User {
       [...]
       public String getLastname() { ...}
    
       @ElementCollection
       @CollectionTable(name="Addresses", joinColumns=@JoinColumn(name="user_id"))
       @AttributeOverrides({
          @AttributeOverride(name="street1", column=@Column(name="fld_street"))
       })
       public Set
    getAddresses()
    { ... } } @Embeddable public class Address { public String getStreet1() {...} [...] } // ,Embedded Collection ,

    한 쌍 의 다 중 관련 맵 (단 방향)
    @OneToMany
    
    @JoinColumn(name="orgid")
    
    /**
    
     *      @OneToMany(  )
    
     *     @OneToMany  ,hibernate        
    
     *          ,
    
     *   @JoinColumn(name="orgid"),       ,   
    
     *         orgid,          
    
     */
    

    한 쌍 의 다 중 관련 맵 (양 방향)
    한 끝 에 대하 여:
    @OneToMany(mappedBy="org")
    
    @JoinColumn(name="orgid")
    
    /**
    
     *      ,        mappedBy
    
     *          
    
     *            ,                 
    
     */
    

    다단 계:
    @ManyToOne
    
    @JoinColumn(name="orgid")
    
    /**
    
     *      
    
     *                    ,@JoinColumn(name="orgid")
    
     *       ,          ,          
    
     *          
    
     */
    

    다 대 일 연결 맵
    여러 쪽 에서 설정:
    @ManyToOne(targetEntity=Organization.class)
    
    @JoinColumn(name="orgid")
    
    //     @ManyToOne
    
    //targetEntity       
    
    //@JoinColumn(name="orgid")           ,   org_id
    

    다 중 관련 맵 (단 방향)
    @ManyToMany
    
    /**
    
     *      :  @ManyToMany(  )
    
     *      ,hibernate           ,
    
     *         
    
     *          :user_role   ,     user_id role_id
    
     *             ,    :
    
     */
    
    @JoinTable(name="t_u_r",
    
    joinColumns={@JoinColumn(name="u_id")},
    
    inverseJoinColumns={@JoinColumn(name="r_id")}
    
    )
    

    다 중 관련 맵 (양 방향)
    예 를 들 어 Role 표 와 User 표 는 사용자 가 여러 개의 역할 을 할 수 있 고 캐릭터 도 여러 사용자 에 게 속 할 수 있다.
    사용자 측:
    @ManyToMany
    
    /**
    
     *      :  @ManyToMany(  )
    
     *      ,hibernate           ,
    
     *         
    
     *          :user_role   ,     user_id role_id
    
     *             ,    :
    
     */
    
    @JoinTable(name="t_u_r",
    
    joinColumns={@JoinColumn(name="u_id")},
    
    inverseJoinColumns={@JoinColumn(name="r_id")}
    
    )
    
    /**
    
     * @JoinTable(name="t_u_r",
    
     *         
    
     * joinColumns={@JoinColumn(name="u_id")},
    
     *          
    
     * inverseJoinColumns={@JoinColumn(name="r_id")}
    
     *          
    
     */
    

    역할 단:
    @ManyToMany(mappedBy="role")
    
    /**
    
     *    ,      
    
     */
    

    좋은 웹페이지 즐겨찾기