2017-01-16 6 views
2

Ich möchte, dass meine HQL Object anstelle von Array zurückgibt, weil ich einige Join-Tabellen verwende und wenn ich eine Abfrage mit Spaltennamen verknüpfter Tabellen schreibe, gibt HQL Array-Liste anstelle von Objekt. Ich fand, dass wir new verwenden sollten, um es zu objektieren.HQL gibt kein Objekt zurück

SELECT new Accommodation(a.name, a.rank, ap.pic) FROM Accommodation AS a INNER JOIN a.accommodationPics AS ap WHERE ap.isPromoPic = 1 AND a.cbState.stateName = :stateName 

habe ich versucht, diese so weit und bekam Fehler: 'Accommodation' cannot be resolved to a type.. Stimmt irgendetwas nicht?

aktualisiert

Neue Abfrage: SELECT new ba.reservation.pojo.Accommodation(a.name, a.rank, ap) FROM Accommodation AS a INNER JOIN a.accommodationPics AS ap WHERE ap.isPromoPic = 1 AND a.cbState.stateName = :stateName

@Column(name = "name", nullable = false, length = 200) 
private String name; 

@Column(name = "rank") 
private int rank; 

@OneToMany(mappedBy = "accommodationBean", fetch = FetchType.EAGER, cascade = CascadeType.REMOVE) 
@JsonManagedReference 
private List<AccommodationPic> accommodationPics; 

public Accommodation(String _name, int _rank, ArrayList<AccommodationPic> _pic) { 
    this.rank = _rank; 
    this.name = _name; 
    this.accommodationPics = _pic; 
} 
+0

1. Wie simas_ch sagt: Fügen vollständigen Pfad zu Ihrer Klasse Unterkunft

new Accommodation(a.name, a.rank, ap.pic) 

Sie in Accomodation Klasse ein Konstruktor wie diese haben muss. 2. Haben Sie den richtigen Erbauer über Unterkunft definiert? –

+0

@JoeTaras Ich habe nur einen Standardkonstruktor für die Unterkunft. –

+0

Sie müssen einen Costructor mit (Type1, Type2, Type3) mit 3 Arten Ihrer Abfrage hinzufügen –

Antwort

0

Über diese Abfrage:

Es gibt zwei, um von Fehlern:

Die erste (als simas_ch sagte):

Wenn Sie ein neues Objekt verwenden (in Ihrem Fall Accomodation) müssen Sie Fully Qualified Ihr Objekt mit allen Namespace-Pfad

Die zweite:

Sie müssen einen richtig Konstruktor in Ihrem poj definiert o Definition.

Wenn Sie schreiben dies:

public Accommodation(String name, int rank, a.name, ArrayList<AccommodationPic> pic) { 
    this.name = name; 
    this.rank = rank; 
    this.pic = pic; 
} 
+0

Vielen Dank für Ihre Hilfe –

0

Unterkunft muss mit dem vollständigen Paketnamen vor dem Klassennamen vollständig qualifiziert sein.

+0

Sie meinen, ich glaube: 'ba.reservation.pojo.Accommodation'. Wenn ja, gibt dies auch den gleichen Fehler. –

Verwandte Themen