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 를 사용 할 수 있다.
주의:
@AttributeOverrides(
{
@AttributeOverride(name="xx",column=@Column(name="xxx")),
@AttributeOverride(name="xx2",column=@Column(name="xxx2")),
}
)
@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")
/**
* ,
*/
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[JPA] 즉시로딩(EAGER)과 지연로딩(LAZY) (왜 LAZY 로딩을 써야할까?) (1)Proxy는 이 글의 주제인 즉시로딩과 지연로딩을 구현하는데 중요한 개념인데, 일단 원리는 미뤄두고 즉시로딩과 지연로딩이 무엇인지에 대해 먼저 알아보자. 눈 여겨 볼 곳은 'fetch = FetchType.EAGER...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.