2017-01-06 5 views
0

Ich versuche, die folgende Abfrage mit pagedFlexibleSearchService auslösen.Hybris Flexiquery: Spalte zweideutig definiert

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

I flexibleSearchQuery bin Konfiguration der folgenden Elementtypen zurück:

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

I User-Modell zurückkehre und AddressModel pk als String zurück.

Das Problem ist, wenn ich diese Abfrage durch Java-Code auslösen, wirft es SQLException - Spalte mehrdeutig definiert. Ich habe die konvertierte Abfrage bemerkt, die SELECT * FROM (SELECT....) rownum <10 enthält. Wenn ich jedoch die gleiche Flexiquery in HAC feuere, funktioniert es vollkommen in Ordnung.

Könnte mir bitte jemand sagen, was das Problem sein könnte?

Grüße, Farhan

+0

Warum haben Sie String eingestellt? Es sollte 'flexiQuery.setResultClassList (UserModel.class, AddressModel.class));' sein, die Adresse PK ist auf AddressModel abgebildet. –

Antwort

0

Es wäre für den Anwender (Kunden) viel leichter sein, nur die flexible Suche zu tun:

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

Und danach, in Java-Code jeden Benutzer zu erhalten Liste der Adressen:

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(); 

Die GetUsers Methode:

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

Ich habe nur 2 Modelle in der obigen Abfrage erwähnt, aber ich feuern Abfrage auf 4 Modelle, die nicht aus Java-Code auch wegen der vielen Bedingungen abgerufen werden kann, ist es besser, eine Abfrage mit 4 Modellen zu feuern. – Farhan