> Java > java지도 시간 > 본문

주석을 사용하여 Hibernate 4와 Spring의 엔터티 간의 관계를 어떻게 정의합니까?

Susan Sarandon
풀어 주다: 2024-11-03 13:30:30
원래의
434명이 탐색했습니다.

How do you define relationships between entities in Hibernate 4 and Spring using annotations?

Hibernate 4 및 Spring에서 관계 정의를 위해 주석 사용

단방향 일대일 관계

단방향 관계를 생성하려면 -대일 관계인 경우 소유 클래스에 @OneToOne 주석을 사용합니다. 종속 클래스의 테이블에서 외래 키를 보유할 열의 이름을 지정하도록 @JoinColumn 주석을 구성합니다.

예:

<code class="java">public class Foo {
    private Long fooId;

    @OneToOne
    private Bar bar;
}

public class Bar {
    private Long barId;
    // No corresponding mapping to Foo.class
}</code>
로그인 후 복사

양방향 일대일 One Relationship

양방향 일대일 관계의 경우 두 클래스 모두 @OneToOne으로 주석을 답니다. 소유 클래스의 @JoinColumn 주석을 사용하여 외래 키 열 이름을 지정합니다. 종속 클래스에서 @JoinColumn 주석을 사용하여 외래 키를 소유 클래스에 다시 매핑합니다.

예:

<code class="java">public class Foo {
    private Long fooId;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "barId")
    private Bar bar;
}

public class Bar {
    private Long barId;

    @OneToOne(mappedBy = "bar")
    private Foo foo;
}</code>
로그인 후 복사

사용자와의 단방향 일대다 관계- 관리형 조인 테이블

사용자 관리형 조인 테이블을 사용하는 단방향 일대다 관계의 경우 두 클래스 간의 관계를 매핑하는 조인 테이블 클래스를 생성합니다. @Entity 및 @Table로 조인 테이블에 주석을 달고 열을 상위 및 하위 클래스의 기본 키에 매핑합니다.

예:

<code class="java">public class Foo {
    private Long fooId;

    @OneToMany
    @JoinTable(name="FOO_BAR",
        joinColumns = @JoinColumn(name="fooId"),
        inverseJoinColumns = @JoinColumn(name="barId"))
    private List<Bar> bars;
}

public class Bar {
    private Long barId;

    // No mapping specified here.
}

@Entity
@Table(name="FOO_BAR")
public class FooBar {
    private UUID fooBarId;

    @ManyToOne
    @JoinColumn(name = "fooId")
    private Foo foo;

    @ManyToOne
    @JoinColumn(name = "barId")
    private Bar bar;

    // You can store other objects/fields on this table here.
}</code>
로그인 후 복사

양방향 일대다 외래 키 매핑을 사용한 관계

외래 키 매핑을 사용한 양방향 일대다 관계의 경우 소유 클래스에 @OneToMany 주석을 달고 종속 클래스에 @ManyToOne 주석을 답니다. @JoinColumn 주석을 사용하여 종속 클래스 테이블의 외래 키를 보유할 열 이름을 지정합니다.

예:

<code class="java">public class Foo {
    private Long fooId;

    @OneToMany(mappedBy = "bar")
    private List<Bar> bars;
}

public class Bar {
    private Long barId;

    @ManyToOne
    @JoinColumn(name = "fooId")
    private Foo foo;
}</code>
로그인 후 복사

Hibernate를 사용한 양방향 다대다 관계 -관리형 조인 테이블

Hibernate 관리형 조인 테이블을 사용하는 양방향 다대다 관계의 경우 각 클래스에 @OneToMany 주석을 답니다. 두 클래스 간의 관계를 매핑하는 조인 테이블 클래스를 만듭니다. @Entity 및 @Table로 조인 테이블에 주석을 달고 열을 상위 및 하위 클래스의 기본 키에 매핑합니다.

예:

<code class="java">public class Foo {
    private Long fooId;

    @OneToMany
    @JoinTable(name="FOO_BAR",
        joinColumns = @JoinColumn(name="fooId"),
        inverseJoinColumns = @JoinColumn(name="barId"))
    private List<Bar> bars;
}

public class Bar {
    private Long barId;

    @OneToMany
    @JoinTable(name="FOO_BAR",
        joinColumns = @JoinColumn(name="barId"),
        inverseJoinColumns = @JoinColumn(name="fooId"))
    private List<Foo> foos;
}</code>
로그인 후 복사

양방향 다대다 사용자 관리 조인 테이블 개체를 사용한 관계

사용자 관리 조인 테이블 개체를 사용하는 양방향 다대다 관계의 경우 두 클래스 간의 관계를 매핑하는 조인 테이블 클래스를 생성합니다. @Entity 및 @Table을 사용하여 조인 테이블에 주석을 달고 열을 상위 및 하위 클래스의 기본 키에 매핑합니다. @OneToMany로 각 클래스에 주석을 달고 필드를 조인 테이블 클래스에 매핑합니다.

예:

<code class="java">public class Foo {
    private Long fooId;

    @OneToMany(mappedBy = "bar")
    private List<FooBar> bars;
}

public class Bar {
    private Long barId;

    @OneToMany(mappedBy = "foo")
    private List<FooBar> foos;
}

@Entity
@Table(name="FOO_BAR")
public class FooBar {
    private UUID fooBarId;

    @ManyToOne
    @JoinColumn(name = "fooId")
    private Foo foo;

    @ManyToOne
    @JoinColumn(name = "barId")
    private Bar bar;

    // You can store other objects/fields on this table here.
}</code>
로그인 후 복사

계단식 방향 결정

Hibernate는 작업을 양방향 또는 양방향으로 계단식으로 배열할 수 있습니다. 양방향 관계에서. 소유 클래스에 @OneToMany 주석을 표시하여 원하는 방향으로 계단식 변경합니다. 일반적으로 관계의 소유 측에 계단식 표시를 표시하는 것이 좋습니다.

고아 제거

고아 제거를 통해 더 이상 상위 개체와 연결되지 않은 고아 개체가 데이터베이스에서 자동으로 삭제됩니다. @OneToMany 주석에서 orphanRemoval = true를 설정하여 고아 제거를 활성화합니다.

LazyInitializationException 처리

LazyInitializationException은 컬렉션이 초기화되기 전에 느리게 가져온 컬렉션이 포함된 엔터티에 액세스할 때 발생합니다. 이 문제를 해결하려면 Hibernate.initialize()를 사용하여 명시적으로 컬렉션을 초기화하거나 @OneToMany 주석에서 fetchType = FetchMode.EAGER를 사용하여 컬렉션을 즉시 로드하세요.

위 내용은 주석을 사용하여 Hibernate 4와 Spring의 엔터티 간의 관계를 어떻게 정의합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿