2017-01-06 10 views
0

pagedFlexibleSearchServiceを使用して以下のクエリを実行しようとしています。Hybris Flexiquery:列があいまいに定義されています

SELECT {u: PK}, {a: PK} FROM { User AS u}, {Address AS a} WHERE {u: PK} = {a: owner} 

私は、次の項目タイプを返すようにflexibleSearchQueryを設定しています:

flexiQuery.setResultClassList(UserModel.class,String.class)); 

私は、文字列としてUserモデルとAddressModelのPKを返しています。

問題は、このクエリをJavaコードで実行しているときに、SQLExceptionをスローします。列があいまいに定義されています。私はSELECT * FROM (SELECT....) rownum <10を含む変換されたクエリに気づいた。 しかし、私はHACで同じflexiqueryを発射するとき、それは完璧にうまく実行されます。

誰かが問題の原因を教えてください。

よろしく、 Farhan

ユーザーのみ(お客様)のための柔軟な検索を行うことが多く、より簡単だろう
+0

Stringを設定したのはなぜですか? 'flexiQuery.setResultClassList(UserModel.class、AddressModel.class));'にする必要があり、アドレスPKはAddressModelにマップされます。 –

答えて

0

:各ユーザのを取得するためにJavaコードで、

SELECT {u: PK} FROM { User AS u} 

その後アドレスのリスト:

List<UserModel> users=getUsers(); 
//first user's list of addresses 
Collection<AddressModel> addresses = users.get(0).getAddresses(); 
//the first address's(of the first user) 
PK pk = addresses.iterator().next().getPk(); 

getUsers方法:

private List<UserModel> getUsers() { 
    FlexibleSearchQuery query = new FlexibleSearchQuery("SELECT {u: PK} FROM { User AS u}"); 
    return (List) getFlexibleSearchService().search(query).getResult(); 
} 
+0

私は上記のクエリでは2つのモデルだけを述べましたが、実際には4つのモデルでクエリーを実行しています。これは多くの条件のためにJavaコードからフェッチできません。 – Farhan

関連する問題