2012-04-17 2 views
0

에 의해 확인 된 개체의 컬렉션의 회원 :사용하여이 같은 컬렉션의 일부가 아닌 개체의 집합을 반환하는 것을 시도하고 복합 키

TypedQuery<Extra> q = em 
      .createQuery(
        "SELECT e FROM Extra e, Arrangement a WHERE " 
         + "a.id = :arrid AND e NOT MEMBER OF a.extras", 
        Extra.class); 
    q.setParameter("arrid", a.getId()); 
    return q.getResultList(); 

을하지만 밖으로 나쁜 SQL을 얻을 이 :

Caused by: org.h2.jdbc.JdbcSQLException: Subquery is not a single column query; SQL statement: 
select extra0_.code as code427_, extra0_.edition_number as edition5_427_, 
extra0_.totalCost as totalCost427_, extra0_.unitCost as unitCost427_, 
extra0_.units as units427_ from extra_arrangements extra0_ 
cross join arrangements arrangemen1_ 
where arrangemen1_.id=? and 
((extra0_.code, extra0_.edition_number) not in 
    (select extra3_.code, extra3_.edition_number 
    from arrangements_extra_arrangements extras2_, extra_arrangements extra3_ 
    where arrangemen1_.id=extras2_.arrangements_id and 
    extras2_.extras_code=extra3_.code and 
    extras2_.extras_edition_number=extra3_.edition_number)) [90052-161] 

것은이 다른 쿼리가 예상대로 작동한다는 것입니다 :

TypedQuery<Exhibitor> q = em.createQuery(
     "SELECT e FROM Exhibitor e, Edition ed WHERE ed.number = :ednum AND " 
     + "e NOT MEMBER OF ed.exhibitors", 
     Exhibitor.class); 
    q.setParameter("ednum", e.getNumber()); 
    return q.getResultList(); 

유일한 차이 무관을

@Entity 
@Table(name = "exhibitors") 
public class Exhibitor implements Serializable, Comparable<Exhibitor> { 

    @Id 
    private int id; 
    @Column(length = 100) 
    private String code; 
    @ManyToMany 
    private List<Edition> edition; 
    ... 
} 

추가 : 참가 업체는 추가 복합 키가있는 반면, 단일 열 ID를 가지고 g

@Entity 
@Table(name="extra_arrangements") 

public class Extra implements Serializable { 

    @EmbeddedId 
    private ExtraCode id; 
    private double unitCost; 
    private double units; 
    ... 
} 


@Embeddable 
public class ExtraCode implements Serializable { 

    private String code; 
    @ManyToOne 
    private Edition edition; 

    //Getters and setters omitted 
} 

내가 잘못하고 어떻게 고칠 수 있습니다 어떤 생각?

답변

0

this one과 같은 문제라고 생각합니다.
H2 does not currently support that style of IN query.

는 SQL 쿼리에

문제있는 장소 :

 
    AND (
    (
     extra0_.code, 
     extra0_.edition_number 
    ) NOT IN 
    (SELECT ...) 
) 
+0

MySQL의 모든 것을 사용하여, 실제로 내 문제가 의도 한 작품으로! – Kjir