2012-01-31 2 views
0

내가 1에서 두 개의 테이블이 관계 : 관계 없음 :최대 절전 모드 :

musician 
{ 
id; 
... 
musician_status_id; 
... 
} 

musician_status{ 
id; 
name; 
... 
} 

그들은 최대 절전 모드에 매핑됩니다 :는 "m N"에서 "하나 많은"지도

@ManyToOne(fetch = FetchType.LAZY) 
@JoinColumn(name = "musician_status_id", nullable = false) 
public MusicianStatus getMusicianStatus() { 
    return this.musicianStatus; 
} 

이제 내 DB 모델이 다음 중 하나로 변경됩니다.

musician 
{ 
id; 
... 
... 
} 

musician_has_status{ 
musician_id; 
status_id; 
organisation_id; 
... 
} 

musician_status{ 
id; 
name; 
... 
} 

이전 매핑에서 중계하는 많은 쿼리와 코드가 있습니다. 따라서 나는 Hibernate getter가 organisation_id에 따라 하나의 musician_status만을 반환하기를 원한다. 내 organisation_id는 정적 변수 (로그인 데이터)에 저장됩니다.

특정 organisation_id에 대한 musician_status 만 검색하는보기와 인터셉터를 생각했습니다. 나는 이것을 최대 절전 모드에서 어떻게 달성해야할지 모르겠다. ...

감사의 말.

추가 : 새로운 DB 매핑은 다음과 같이 보일 것이다 :

@OneToMany(fetch = FetchType.LAZY, mappedBy = "musician") 
public Set<MusikerHasMusikerStat> getMusicianHasMusicianStatus() { 
    return this.musikerHasMusicianStatus; 
} 

내가 그런 일에 그 변경하려면 :

@OneToMany(fetch = FetchType.LAZY, mappedBy = "musician") 
@Add a Filter or something like that?: where musician_has_status.organisation_id=LoginDat.getOrganisationID() 
public MusicianStatus getMusicianStatus() { 
    //or select the right status here? 
    return this.musicianStatus; 
} 

답변

0

지도를 정말 데이터베이스에서와 같이하고, getMusicianStatus 코드의 코드를 변경하십시오.

@OneToMany(...) 
@JoinColumn(...) 
public void getStatusesWithOrganization() { 
    return this.statusesWithOrganization(); 
} 

/** 
* Returns the musician status for the organization stored in 
* the static login data 
*/ 
public public MusicianStatus getMusicianStatus() { 
    for (StatusWithOrganization s : statusesWithOrganization) { 
     if (LoginData.organizationId.equals(s.getOrganization().getId())) { 
      return s.getMusicianStatus(); 
     } 
    } 
    return null; 
} 
+0

빠른 대답 주셔서 감사합니다 : 나는 그것에 생각했지만 나는 Musician.musicianStatus = ...을 사용할 수 없다고 생각합니다. Hibernate 쿼리에서, 또는? – Hollerweger

+0

아니요, 할 수 없습니다. 데이터베이스 스키마와 엔터티가 연결된 방식을 변경했습니다. 코드를 리팩토링해야합니다. 필터를 사용할 수도 있지만 나중에 추가 조직 열을 사용해야 할 때 후회할 수 있다는 느낌이 들게됩니다. http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#objectstate-filters –

+0

감사합니다. 필자가 찾고있는 필터가 될 수 있다고 생각합니다. 더 나은 이해를 위해 몇 가지 코드를 추가했습니다. – Hollerweger

0

이드의 sugges @Where(clause = "MYCONDITION") 절을 사용하면 쿼리 수준에서 데이터를 필터링하므로 성능이 훨씬 향상됩니다.

+0

where 문을 컴파일 타임 상수로 사용해야합니다. 문제가 올바르게 이해되면 컴파일 타임 상수가됩니다. –

+0

값을 동적으로 보내야하는 경우 필터를 사용할 수 있습니다. http://docs.jboss.org/hibernate/orm/4.0/manual/en-US/html/filters.html 이렇게하면로드를 제한 할 수 있습니다. 쓸모없는 개체의 .. –

+0

예, 그것은 내 의견 중 하나에서 제안한 것입니다. –