2009-05-12 2 views
1

사람들을위한 테이블 하나, 회사 용 테이블 하나, 휴대폰 용 세 번째 테이블이있는 주소록 응용 프로그램을 만들려고합니다. 전화 테이블은 사람과 회사의 데이터가 어디서 왔는지 나타내는 필드가 있습니다. 나는 아주 쉽게 사람과 해당 전화를 얻을 수있는 일반 SQL에서두 열에 최대 절전 모드 컬렉션 만들기

public class Person { 
    private Integer id; 
    private String firstName; 
    private String lastName; 
    private Collection<Phone> phones; 
    // ... 
} 

public class Company { 
    private Integer id; 
    private String name; 
    private Collection<Phone> phones; 
    // ... 
} 

public class Phone { 
    private Integer id; 
    private String number; 
    // ... 
} 

: 나는 매우 간단한 표현이다 상응하는 자바 클래스를 생성 한

CREATE TABLE `Person` { 
    `id` int(11) NOT NULL auto_increment, 
    `firstName` varchar(80) NOT NULL, 
    `lastName` varchar(80) NOT NULL 
} 

CREATE TABLE `Company` (
    `id` int(11) NOT NULL auto_increment, 
    `name` varchar(80) NOT NULL 
} 

CREATE TABLE `ContactPhone` (
    `id` int(11) NOT NULL auto_increment, 
    `contactType` char(1) NOT NULL, -- either 'P' or 'C' 
    `contactId` int(11) NOT NULL, -- the id of the Person or Company 
    `number` varchar(40) NOT NULL 
} 

: 이제 이러한 간단한 테이블이 있다고 가정하자 . Person과 Phone 사이 및 Company와 Phone 사이의 매핑을 일반 hibernate (주석 없음)를 사용하여 작성해야하지만 작동시킬 수는 없습니다. 단방향인지 또는 양방향인지 여부는 확실하지 않습니다. 설명서를 검색했지만 도움이되는 내용을 찾지 못했습니다. 누군가?

+0

회사와 전화의 관계는 무엇입니까? – Cherian

+0

회사는 단방향으로 전화 모음을 가질 수 있습니다. 전화에서 기업으로의 '거꾸로'연결은 없습니다. – rmarimon

답변

0

"Filters" mapping feature 당신이 이런 식으로 뭔가 보일 것 파일 설정에서 매핑 테이블을 통해 매핑하는 방법을 묻는 경우 :

<bag name="Phone" table="CompanyPhoneMapping" lazy="true" cascade="all">

<key column="CompanyId" />

<one-to-many class=<insert namespace>.Phone, <insert dll> />

</bag>

나는 nhibernate에만 익숙하지만 java 동면 솔루션은 유사하다고 가정합니다.

0

사용이 달성 할 수있는 최대 절전 모드

+0

이것은 개체를로드 할 때 작동하는 것처럼 보이지만 개체를 ​​유지할 때는 어떻습니까? ContactPhone 테이블의 contactType에 올바른 값이 어떻게 삽입됩니까? – rmarimon

1

마침내 나는이 작업을 할 수있었습니다. 내가 찾고 있던 것은 최대 절전 모드의 다형성 요소였다. 다음과 같이 Contact 클래스를 만들었습니다.

public class Contact { 
    private Integer id; 
    private Collection<Phone> phones; 
    ... 
} 

및 파생 된 Person 및 Company. Hibernate의 다형성을 사용하면 Person과 Company를 다른 테이블에 저장하고 Phone to Contact to Contact를 양방향 방식으로 연결할 수 있습니다.

+0

이렇게하는 방법 중 하나입니다. 다른 방법으로 내 게시물을 참조하십시오. –

0

허용 모델은 PersonCompany 클래스의 조인 테이블과의 단방향 연결입니다. 이것이 정확히 달성되는 방법은 모델의 특성에 따라 다릅니다. 온라인 설명서는 here입니다.