2014-12-16 2 views
1

최대 절전 모드를 사용하여보기와 테이블간에 쿼리를 시도하고 있습니다.최대 절전 모드 :보기 및 테이블과 다 대다 관계

내가 3 개 예측, SELECT id, name, storages

최대 절전 모드 엔티티 같은 것을 준비하는 것은

@Entity 
@Table(name = "cl_storage") 
public class StorageModel implements Serializable { 
@ManyToMany(mappedBy = "storages") 
    private final Set<LibraryModel> libraries = new HashSet<LibraryModel>(); 
} 

은 내가 ArrayIndexOutOfBoundsException를 얻을 수 (나는 단지 관련 컬럼을 포함하고있어)

@Entity 
@Table(name = "cl_libraryWithItems_view") 
public class LibraryWithItemsViewModel implements Serializable { 
    .... other columns 

@ManyToMany(fetch = FetchType.EAGER) 
    @ForeignKey(name = "fk_library_id", inverseName = "fk_storage_id") 
    @JoinTable(name = "cl_library_storage", 
      joinColumns = {@JoinColumn(name="library_id")}, 
      inverseJoinColumns = {@JoinColumn(name="storage_id")}) 
    Set<StorageModel> storages = new HashSet<StorageModel>(); 

초 엔티티입니다. 후드를 들여다 보니 다음과 같은 오류가 발생합니다. SimpleProjection.java에서

, 라인 (90)은, 기억 칼럼에 대한 항목의 수, I는

public int getColumnCount(Criteria criteria, CriteriaQuery criteriaQuery) { 
     Type types[] = getTypes(criteria, criteriaQuery); 
     int count = 0; 
     for (int i=0; i<types.length; i++) { 
      count += types[ i ].getColumnSpan(criteriaQuery.getFactory()); 
     } 
     return count; 
    } 

이 혼잡 다른 곳에서, 동일한 파일에서 1

int numColumns = getColumnCount(criteria, criteriaQuery); 

얻을 첫 번째 두 열의 0입니다 (이 범위를 벗어난 곳은 여기에있다)

result[i] = types[i].nullSafeGet(rs, columnAliases[pos], session, null); 

추가 세부 사항, CollectionType.java에 getColumnSpan 우리가 수집을 기대하고 있기 때문에이 방법이 트리거됩니다, 0을 반환하고, 0

public int getColumnSpan(Mapping session) throws MappingException { 
    return 0; 
} 

그래서 문제가 될 것으로 보인다 반환, 우리의 열 컬렉션을, 그리고 getColumnSpan 0을 반환

이제 문제를 해결하는 방법이 있습니다. 무엇을해야합니까? 그러면 storages 열을 성공적으로 투영 할 수 있습니까?

감사합니다.

+0

http://stackoverflow.com/questions/2920678/getting-all-objects-with-a-certain-element-inside-a-collection-of-strings-with-c에 따르면, 이것에 대한 열린 버그. – Nasir

답변

0

나는 정말 어리석은 짓을하고있었습니다.

나는 양방향 매핑을 원했지만, 나는 양방향 매핑이 아니었다.

StorageModel 세트를 갖는다. StorageModelLibraryWithItemsViewModel 집합이어야합니다.

이 문제는이 변경으로 인해 사라집니다. 더 많은 드래곤들이 숨어 있지만 하루는 또 하나의 이야기입니다.

0

많은 문제를 ManyToMany 양방향 관계를 설정하고 방지하는 가장 좋은 방법은,이 엔티티 테이블 복합 기본 키가 복합되어 있어야 해당 테이블

각 ManyToOne이 있어야합니다 개체에 매핑 세 번째 표를 만드는 것입니다 table1_primarikeyoftable1 및 table2_primarykeyoftable2 두 테이블의 외래 키가 두 개 있습니다. 이 작업은 정상적으로 작동하며 필요한 경우이 세 번째 테이블에 다른 필드를 추가 할 수 있습니다.

+0

글쎄, 그 방법은 SQL이 작동합니다.나는 최대 절전 모드가 이것을 암묵적으로 처리 할 것으로 기대한다. 아니면이 가정이 잘못 되었습니까? – Nasir