2010-03-23 3 views
2

나는 꽤 오랫동안 작업 해왔다.하지만 여전히 내 코드에 무엇이 잘못된 것인지 알 수 없다. 각 서비스에는 여러 개의 프로필이 있지만 각 프로필에는 하나의 서비스 만 있습니다.many-to-one에서의 최대 절전 모드 외래 키 매핑

Service 
{ 
Long service_id; // primary key 
... getter/setter 
} 

Profile 
{ 
Long profile_id; // primary key 
Long service_id; // foreign key 
... getter and setter 
} 

(Profile.hbm.xml) 추가 함

< many-to-one name="service_id" class="com.mot.diva.dto.Service" column="SERVICE_ID" cascade="save-update"> 
< /many-to-one> 

지도를 올바르게 표시 할 수 있습니까?

답변

9

각 서비스에는 여러 개의 프로필이 있지만 각 프로필에는 하나의 서비스 만 있습니다.

그런 다음 적절하게 개체 모델을 디자인하십시오. ORM 도구를 사용할 때는 개체 (개체)와 ID가 아닌 개체 사이의 관계를 생각해야합니다. 당신의 코드는 다음과 같이해야합니다 그래서 ORM은 PK, FK, 조인 등의 처리됩니다 :

public class Service implements Serializable { 
    private Long service_id; // primary key 
    private Set<Profile> profiles = new HashSet<Profile>(); 

    // ... getter/setter 
} 

public class Profile implements Serializable { 
    private Long profile_id; // primary key 
    private Service service; 

    // ... getter and setter 
} 

그리고 Profile.hbm.xml 매핑 파일 :

.... 
<many-to-one name="service" 
      class="com.mot.diva.dto.Service" 
      column="SERVICE_ID" 
      cascade="save-update"> 
</many-to-one> 
... 

그리고 Service.hbm.xml에서 (당신의 협회 때문에 양방향으로 보입니다.) :

... 
<set name="profiles" inverse="true"> 
    <key column="PROFILE_ID" not-null="true"/> 
    <one-to-many class="com.mot.diva.dto.Profile"/> 
</set> 
... 
+0

답장을 보내 주셔서 감사합니다. 그것은 완벽하게 작동합니다. 나는 ibatis와 혼란스러워하고 때로 절전합니다. ~ – Lily

+0

@ 릴리 환영합니다. iBATIS는 ORM이 아닌 데이터 매퍼 (데이터베이스에 가까운 낮은 레벨)입니다. ORM을 사용하면 테이블이 아닌 객체를 생각해야합니다. –