2017-12-13 16 views
2

: 나는 지금이 두 개체를 연결하고 정의하려면 어떻게JPA 엔티티 클래스를 연결하는 방법은 무엇입니까? 이 두 기관이있는 경우 (일대/대일)

@Entity 
@Table(name = "CUSTOMER") 
public class Customer { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @Column(name = "FIRST_NAME") //Attributes in the entitiy 
    private String firstName; 

    @Column(name = "LAST_NAME") 
    private String lastName; 

    @Column(name = "ADDRESS") 
    private String address; 

@Entity 
@Table(name = "ADDRESS") 
public class Address { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @Column(name = "STREET_NAME") //Attributes in the entitiy 
    private String streetName; 

    @Column(name = "HOUSE_NUMBER") 
    private int houseNumber; 

Customer 많은을 가지고 Addresses?

+2

Google 검색을 수행해주세요. 나는 SO가 많은 예제를 가지고 있다고 생각한다. – pirho

답변

0

. 나는 매우 ObjectDB website을 살펴볼 것을 제안한다.

@Entity 
@Table(name = "CUSTOMER") 
public class Customer { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @Column(name = "FIRST_NAME") //Attributes in the entity 
    private String firstName; 

    @Column(name = "LAST_NAME") 
    private String lastName; 

    @Column(name = "ADDRESS") 
    private String address; 

    @OneToMany(mappedBy = "customer") 
    private List<Address> addresses; 
} 

과 같은 주소 클래스에서 고객에 대한 참조가 :

이 특정 시나리오의

, 당신은 아래를 정의 할 수 있습니다

@Entity 
@Table(name = "ADDRESS") 
public class Address { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @Column(name = "STREET_NAME") //Attributes in the entitiy 
    private String streetName; 

    @Column(name = "HOUSE_NUMBER") 
    private int houseNumber; 

    @ManyToOne(fetch = FetchType.LAZY) 
    private Customer customer; 
} 

이 편집 : 귀하의 요청을 바탕으로 여러 관계에 대한 예를 보려면 고객 및 주소 엔티티에 대해 구현할 수있는 방법을 다음과 같습니다.

먼저 고객 테이블을 참조하는 두 개의 외래 키와 주소를 참조하는 다른 외래 키가있는 중간 테이블을 가져야합니다.

select * from customer_address; 

customer_id | address_id 
------------------------ 
    12  |  15 
    12  |  14 
    12  |  13 
    2  |  15 
    2  |  13 
    19  |  11 

지금 당신은 당신의 주석을 업데이트하고 엔티티 사이에 많은 관계로 많은 추측이 표를 사용하여 JPA를 말해야한다 :이 중간 테이블 customer_address 이름을 가정 해, 다음의 데이터는 다음과 같이 될 것이다.

고객 클래스 :이 코드 주석에서

@Entity 
@Table(name = "CUSTOMER") 
public class Customer { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @Column(name = "FIRST_NAME") //Attributes in the entity 
    private String firstName; 

    @Column(name = "LAST_NAME") 
    private String lastName; 

    @Column(name = "ADDRESS") 
    private String address; 

    @ManyToMany(mappedBy = "customer") 
    @JoinTable(name = "customer_address", 
     joinColumns = @JoinColumn(name = "customer_id", referencedColumnName = "id"), 
     inverseJoinColumns = @JoinColumn(name = "address_id", referencedColumnName = "id")) 
    private List<Address> addresses; 
} 

@Entity 
@Table(name = "ADDRESS") 
public class Address { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @Column(name = "STREET_NAME") //Attributes in the entitiy 
    private String streetName; 

    @Column(name = "HOUSE_NUMBER") 
    private int houseNumber; 

    @ManyToMany(mappedBy = "customer") 
    @JoinTable(name = "customer_address", 
     joinColumns = @JoinColumn(name = "address_id", referencedColumnName = "id"), 
     inverseJoinColumns = @JoinColumn(name = "customer_id", referencedColumnName = "id")) 
    private List<Customer> customer; 
} 

는 JPA에 다음과 같은 정보를 제공하는 데 사용됩니다 :

  • @ManyToMany

    는 다음을 지정하는 데 사용 :
  • @JoinTable 관계의 유형을 나타냅니다 테이블은 실제 관계 데이터를 보유하고 있으며 다음과 같은 속성을 가지고 있습니다.
    • joinColumns : @ManyToMany 주석을 포함하는 엔티티 클래스를 참조하는 중간 테이블의 열을 정의합니다. Customer 클래스에서는 외래 키인 열을 customer 테이블로 정의하고 Address 클래스에서는 address 테이블의 외래 키인 열을 정의합니다.
    • inverseJoinColumns : 정확히 joinColumn 속성과 반대입니다. @ManyToMany 주석의 다른쪽에있는 엔티티 클래스를 참조하는 중간 테이블의 열을 정의합니다.Customer 클래스에서는 address 테이블에 외래 키 열을 정의하고 Address 클래스에는 customer 테이블에 외래 키 열을 정의합니다.

은 내 설명을 그것이 있어야로 이해 /로 읽을 수없는 것을 알고 있지만, 그것이 @JoinTable 주석을 설명하기 쉽지 않다 알고있다. 샘플 코드 자체를 읽고 열/속성 이름을 일치 시키면 각각의 의미를 쉽게 찾을 수 있습니다. 또한 ObjectWeb 웹 사이트 (샘플도 포함)에서 확인할 수 있습니다.

+0

고마워요! 그리고 다 대다 realtion과 어떻게 그것입니까? – user10

+0

@ user10 많은 관계에 대한 다른 시나리오로 내 대답을 업데이트했습니다. – zaerymoghaddam

+0

대단히 감사합니다! – user10

-1

이 엔터티가 참조하는 테이블을 정의하려면 xml 파일이 있어야합니다. 그러면 필드와 관계를 추가 할 수 있습니다.

예 : 당신은 쉽게 인터넷을 통해이 예의 톤을 찾을 수 있습니다

<entity class="class" access="FIELD"> 
<table name="class_table" /> 

<attributes> 
    <id name="classId"> 
     <column name="class_id" /> 
    </id> 

    <basic name="className"> 
     <column name="case_name" /> 
    </basic> 

<!-- Foreign key many-to-one --> 
    <many-to-one name="classType" fetch="LAZY"> 
     <join-column name="class_type_id" referenced-column-name="class_type_id" /> 
    </many-to-one> 

<!-- Foreign key one-to-many --> 
    <one-to-many name="class_list" mapped-by="class" fetch="LAZY" /> 
</attributes> 
</entity> 
+0

엔티티를 작성한 코드에서 직접 수행 할 수 없습니까? – user10

+0

@ user10 당신이 간단하게 주석을 추가 할 수 있는지 ManyToOne 또는 OneToMany, 그러면 괜찮을 것입니다. 나는 다른 접근법을 요구하고 있다고 생각합니다. – PSo

+0

나는 그것을 배우는 중이며 그것을 할 수있는 가장 쉬운 방법을 찾고 있기 때문에 좋아 ... – user10