select "neu" statement Problem (jpql)

Status
Nicht offen für weitere Antworten.

bam

Mitglied
Guten Tag zusammen,

folgendes plagt mich.
Dieser Querie:

Code:
SELECT NEW A(x.nummer) FROM A x WHERE x

funktioniert so wie erwartet. Versuche ich allerdings mehrere Spalten auszulesen wie bspweise:

Code:
SELECT NEW A(x.nummer, x.name, x.vorname) FROM A x WHERE x

kriege ich folgenden Fehler:

Code:
Caused by: org.hibernate.hql.ast.QuerySyntaxException: Unable to locate appropriate constructor on class [de.xxx.A] [SELECT NEW A(x.nummer, x.nachname, x.vorname) FROM de.xxx.A x WHERE x]

Es gibt in A einen Konstruktor fuer die entsprechenden Parameter.
Im Internet finde ich nur immer dieses eine Tutorial zu jpql und dort stehen 5 Zeilen zum select new statement und genau daran halte ich mich.

Vielen Dank für die Hilfe! 🙂

Gruß
bam
 
hmm, genau solche Probleme habe ich in HQL von Hibernate auch manchmal
dann poste doch mal
- diesen Konstruktor
- die DB-Tabellen-Definition
- evtl. Mapping

oder lade die Daten erstmal in der Form
SELECT x.nummer, x.name, x.vorname FROM A x WHERE x

in Hibernate geht das jedenfalls, da bekommt man eine Liste von Object[],
also laden und die Klassen der erzeugten drei Dinge ausgeben und mit dem Konstruktor vergleichen

versuche auch mal einen Konstructor
A(Object a, Object b, Object c)
zu definieren, und gibt darin die Klassen der Parameter aus,
falls int oder andere primitive Datentypen dabei, dann evtl. entsprechend modifiziert

-----

edit:
> org.hibernate.hql.ast.QuerySyntaxException

ok, auch Hibernate 😉
 
Danke fuer die schnelle Antwort 🙂

Also
Code:
SELECT x.nummer, x.nachname, x.vorname FROM A x WHERE x
klappt leider nicht. Wird nichtmal als richtiges Statement verstanden.

Code:
Caused by: org.hibernate.hql.ast.QuerySyntaxException: unexpected AST node: x near line 1, column 87 [SELECT x.nummer, x.nachname, x.vorname FROM de.xxx.A x WHERE x]

Habe ich das vllt falsch verstanden? Der Kosntruktor ist denkbar simpel:

Code:
public A(Integer nummer, String nachname, String vorname){
        this.nummer = nummer;        
        this.nachname = nachname;
        this.vorname = vorname;
    }

Leider weiß ich weder was du genau mit db TabellenDefinition noch Mapping meinst 🙁

Gruß
bam[/code]
 
geht es nicht um eine Datenbank? eine Tabelle in einer Datenbank?
was könnte die Definition einer solchen Tabelle wohl sein?
SQL der Form CREATE TABLE?

oder versucht mal das mit

public A(Object a, Object b, Object c){
System.out.println(a.getClass().getName();
...
}
 
Hab soeben deinen zweiten Tipp angewandt und jetzt klappts. Also Die Parameter Typen sind zwar die die ich angegeben habe also weiß ich nicht woran es liegt. Aber wenn ich statt den Primitives einfach Object angeben kriege ich das zurueck was ich brauche 🙂

:applaus: Vielen Dank!

Gruß
Viktor
 
> statt den Primitives

du hattest doch bisher Integer, String, String? das sind alles Klassen,

Object Object Object sollte keine Endlösung sein!,
nur zum Testen um zu erkennen, dass z.B. Long statt Integer ankommt oder irgendein höheres Objekt statt String..
 
Es sind aber genau die Typen wie ich sie hatte:
Integer, String, String.

Habe aber gerade das komische Gefühl, dass Netbeans die Änderungen nicht sofort ... "verarbeitet". Gerade hat es funktioniert. Kurze Zeit später wieder nicht (ohne Änderungen......)
 
Hier noch die relevanten Table Teile:

Code:
USE [xyxyxyx]
GO
/****** Objekt:  Table [dbo].[A]    Skriptdatum: --- *****/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[A](
	[NUMMER] [int] NOT NULL,

....
....
[NACHNAME] [nvarchar](30) COLLATE Latin1_General_CI_AS NULL,
[VORNAME] [nvarchar](30) COLLATE Latin1_General_CI_AS NULL,
....
....

[EAEH1500NAEH] [bit] NULL,
 CONSTRAINT [PK_A] PRIMARY KEY CLUSTERED 
(
	[NUMMER] ASC
)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO
SET ANSI_PADDING OFF


Falls es vllt etwas bringt.
 
Es lag tatsächlich zum Teil an Netbeans. Nachdem ich es 5 Minuten mit den richtigen Klassen stehen gelassen habe, klappt es jetzt. Bin mir aber sicher, dass ich es genau so schon oefters probiert habe und es nicht funktioniert hat :bahnhof:
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben