2011-09-12 12 views
0

この照会を実行すると、常にの列番号が多すぎます。HQLサブクエリー照会選択

SELECT o FROM Overlay o WHERE (:coordinate) IN ELEMENTS(o.blocksCoordinates) 

私はSQLでそれを行う場合、それは動作します:

Select * from Overlay overlay0_ where (0,0) in (select x, y from ... 

は、座標は、xとyの値を持つ単純な組み込みエンティティです。

@ElementCollection 
private Set<Coordinate> blocksCoordinates = new HashSet<Coordinate>(); 

私は、エンティティ座標:私が間違って

@Embeddable 
public class Coordinate implements Serializable { 
    private static final long serialVersionUID = -5866341829302555966L; 

    protected int x; 
    protected int y; 

何をしているのですか?

答えて

1

他の方法でラウンドそれを試してみてください。

select o from Overlay o left outer join o.blocksCoordinates as c where c = :coordinate 

またはwithキーワードを使用して:そのクエリを使用して

select o from Overlay o join o.blocksCoordinates as c with c = :coordinate 

は、cに参加=成功した座標れる任意のオーバーレイを返す必要があります。

編集:別の方法として、xとyの値を使用するようにしてください:

select o from Overlay o join o.blocksCoordinates as c with c.x = :x and c.y = :y 
+0

は動作しませんでした。 :-(同じエラー:原因:org.hibernate.HibernateException:SqlNodeのテキストが予想される列数を参照していない – mkuff

+0

埋め込みがこのクエリに適合しない可能性があります – mkuff

+0

xとyの最後の回避策がうまくいきました! ;-) – mkuff

関連する問題