Fehler: kann Nicht erstellt TypedQuery query mit mehr als eine Rückgabe
Ich versuche, die Funktion searchBook mit java und jpa. Ich habe 2 Klassen, die Medien und Buch. Book extends Medien. Und ich halte die Daten in der anderen Tabelle. Ich versuche, wählen Sie die Daten aus der Abfrage unten:
TypedQuery<Media> query = em.createQuery(
"SELECT m.title, b.isbn, b.authors"
+ " FROM Book b, Media m" + " WHERE b.isbn = :isbn"
+ " OR lower(m.title) LIKE :title"
+ " OR b.authors LIKE :authors", Media.class);
query.setParameter("isbn", book.getisbn());
query.setParameter("title", "%" + book.getTitle().toLowerCase()
+ "%");
query.setParameter("authors", "%" + book.getAuthors() + "%");
bookList = query.getResultList();
Aber ich habe den Fehler:
java.lang.IllegalArgumentException: Cannot create TypedQuery query
mit mehr als eine Rückkehr
Dies ist das erste mal, wenn ich mit JPA. Ich kann nicht finden die den Fehler.
m.Titel + b.isbn + b.Autor NICHT ein instatiation der Medien machen.
wie konnte ich das tun? pls help
Ich kann nicht sehen, was Sie wollen, wollen Sie Medien oder Buch oder etwas anderes, das ist nicht eine Entität?
eigentlich mache ich den gleichen Weg wie ich in die SQL. Ich möchte select Titel, isbn und Autoren aus den Parametern, die es werden könnten, isbn oder Titel oder Autoren.
Sie sind zu gehen über diese alle falsch. Wenn Buch erstreckt sich die Medien dann sollten Sie Modell, dass es der Weg in Ihre Entitäten. Poste bitte die relevanten Einheit code für beide Buch und Medien. Die Buchung der DDL-Code für die Tabellen wäre auch nett.
wie konnte ich das tun? pls help
Ich kann nicht sehen, was Sie wollen, wollen Sie Medien oder Buch oder etwas anderes, das ist nicht eine Entität?
eigentlich mache ich den gleichen Weg wie ich in die SQL. Ich möchte select Titel, isbn und Autoren aus den Parametern, die es werden könnten, isbn oder Titel oder Autoren.
Sie sind zu gehen über diese alle falsch. Wenn Buch erstreckt sich die Medien dann sollten Sie Modell, dass es der Weg in Ihre Entitäten. Poste bitte die relevanten Einheit code für beide Buch und Medien. Die Buchung der DDL-Code für die Tabellen wäre auch nett.
InformationsquelleAutor user1412944 | 2012-05-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ohne goind in die details über, wie
Media
undBook
sollte modelliert werden, will ich wenigstens erklären, warum man diese Ausnahme.Du tust:
Bedeutet dies: erstellen einer Abfrage mit
someJPQL
, und diese Abfrage von Instanzen derMedia
Einheit.Aber Ihre
JPQL
ist:Damit die Abfrage nicht zurück, Entitäten des Typs Medien. Es gibt drei Felder, von zwei verschiedenen Personen. Es gibt keine Möglichkeit, Ihre JPA-Motor könnte magisch erstellen von Instanzen von Medien aus diesen 3 Spalten. Würde eine Abfrage zurückgeben Instanzen von Medien, wenn es sah aus wie dieser:
SELECT NEW com.company.ui.EntityIDKey(c.companyId, c.name) FROM Company c WHERE c.companyId is not null and c.name is not null and length(trim(c.name)) > 0 order by c.name asc
. Ich bin mit einem TypedQuery wie folgt:List<EntityIDKey> companies = getEntityManager().createQuery(sql, EntityIDKey.class).getResultList();
nicht hijack Frage 2?Vor 5 Jahren. Ihre eigenen Fragen stellen, und geben Sie alle details.
Ich habe nicht versucht, entführen die Frage. Im Gegenteil, dieser thread war sehr relevant ist, das ist, warum ich am Ende versuchen, Ihre Lösung. Ich fühlte, dass wenn ich etwas fehlt, und Sie könnte helfen, es zu finden, dann sollte es auch anderen helfen.
InformationsquelleAutor JB Nizet
Als workaround, um Einheit komponiert, die von anderen entity-Attribute erstellen, können Sie es innerhalb von Abfrage-Konstruktor.
- Abfrage :
Person :
Habe ich Probe, ändern Sie die Datentypen der Konstruktor entsprechend.
Eigentlich ein besserer Ansatz weiter zu verwenden
JOIN FETCH
: stackoverflow.com/a/39465150/1304830InformationsquelleAutor Nayan Wadekar
wenn Ihr mit Hibernate version < 4, treffen Sie diese Fehler.
Gehe ich gleiche problem mit dem v3.5. Schließlich hatte ich die Verwendung einer einfachen Abfrage und warf die einzelnen parameter manuell
siehe andere Kommentare hier : https://groups.google.com/forum/#!Thema/axonframework/eUd1d4rotMY
InformationsquelleAutor Benjamin Fuentes
@WebUser anstatt das zu tun,
Versuchen Sie dies :
funktioniert für mich.
InformationsquelleAutor dubem uzuegbu
Ich... entfernen
des
weil Sie wieder mehr Personen in dieser Quelle "WÄHLEN Sie m.title, b.isbn, b.Autoren"
Ex.:
InformationsquelleAutor Acacio Martins
Wenn Sie noch verwenden möchten
TypedQuery
können Sie ändern den Ergebnistyp zuObject[]
.Jeder
Object[]
stellt eine Reihe von Daten. Es enthält die ausgewählten Werte für die Zeile in der Reihenfolge, in der Sie ausgewählt wurden in der Abfrage. Element 0 ist der Titel, element 1 ist die ISBN, und das element 2 ist den Autoren. Sie werden wahrscheinlich brauchen, um Darsteller, die diese Werte, wenn Sie möchten, um Sie in einer sinnvollen Art und Weise. Da das Feld Werte kommen aus zwei verschiedenen Tabellen, die Sie speichern könnte Ihnen in einer Art container-Objekt.Sie können nicht werfen ein
Object[]
zu einer Hibernate-Entität. Dieses Ergebnis liefert auch Werte aus zwei verschiedenen Tabellen (Medien-und Buch -) es gibt also nicht ein einzelnes Objekt diese Feld-Werte-Karte sowieso. Wenn Sie wollte, um speichern Sie die Ergebnisse in ein Objekt, würden Sie haben, um eine Schleife durch die Ergebnisse, Darsteller jedes Feld Wert ein, und speichern Sie dann die Werte im neuen Objekt. Ich aktualisiert meine Lösung mit einem Beispiel, wie man das tun könnte.InformationsquelleAutor David DeMar