Ich entwickle ein Spiel mit einer Datenbankverbindung und verwende JPA, um meine Daten zu erhalten. Hier ist meine Spieleinheit:
%Vor%Und hier ist mein menschliches Wesen:
%Vor%Um die Liste aller in der Datenbank gespeicherten Menschen zu erhalten, benutze ich dieses DAO, das sehr gut funktioniert und auch die Building entity:
bekommt %Vor% Das Problem ist, wenn ich versuche, das gleiche zu tun, um die Liste aller Spiele mit der JPQL-Abfrage SELECT g FROM game g
zu bekommen, bekomme ich diesen Fehler:
Sie sollten
haben %Vor% aber Sie haben game
anstelle von Game
.
Die Annotation @Table
wird für DB verwendet. Wenn Sie den Namen in Ihrem JPQL ändern müssen, verwenden Sie die Annotation @Entity: @Entity (name="nameUsedInJPQL") = & gt; nameUsedInJPQL wird in Ihrem JPQL verwendet. Wenn Sie in Ihrer @Entity nichts angeben, wird der Groß- / Kleinschreibung-Name der Entity verwendet.
Ich hatte gerade die gleiche Situation, aber meine JPQL-Abfrage war korrekt! Es ist in Glassfish 4.1 (Build 13) (mit EclipseLink) aufgetreten.
Nach einigem googeln und Code-Kommentieren fand ich heraus, dass die Ursache von " Der abstrakte Schematyp 'MyEntity' ist unbekannt " war einige Verwendung von Java 8 Lambda-Code darin die Entitätsklasse .
Es scheint, dass jedes Feature von Java 8 (noch) nicht in der Version von EclipseLink unterstützt wird, die mit GF geliefert wird. Weitere Informationen finden Sie in dem Fehlerbericht dazu.
Hoffe, das hilft.
Der Name, der für JPQL-Abfragen verwendet wird, ist als einfacher Name der Entitätsklasse definiert - Game
oder Human
in Ihrem Fall. Sie kann durch das name
-Attribut der @Entity
-Anmerkung überschrieben werden. @Table
ist eine Annotation für physische Zuordnungen und hat keinen Einfluss auf den Entitätsnamen in der Abfrage.
Es funktioniert mit human
, weil die Abfragezeichenfolge nicht zwischen Groß- und Kleinschreibung unterscheidet.
Tags und Links java jpa persistence jpql