FEHLER: syntax-Fehler an oder in der Nähe von "Benutzer"
Ich bin mit Hibernate und haben eine persistente Klasse "User" genannt. Da dies ein Schlüsselwort, markierte ich die @Entity-Attribut mit einem anderen Namen (die ich gesehen habe, zum Beispiel diese Frage:
Nicht verwenden Tabelle namens "Benutzer" in postgresql, hibernate)
Allerdings habe ich noch Probleme, weil diese Klasse erweitert eine andere, und es sieht aus wie hibernate ist immer noch versuchen, zu verwenden "Benutzer" den Namen einer Spalte und immer Durcheinander:
@Entity( name = "XonamiUser" )
public class User extends PropertyContainer {
...
und
@MappedSuperclass
public abstract class PropertyContainer implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
protected long key;
/** tags */
@ElementCollection
protected Set<String> tags;
@ElementCollection
protected Set<String> searchList;
...
Meine anderen Klassen, die sich PropertyContainer scheinen gut zu funktionieren.
Ist das ein bug in hibernate? Gibt es eine Möglichkeit, um dieses kurze refactoring? Danke!
Hier sind die Fehler, die ich bin zu sehen (leicht bereinigt):
WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 0, SQLState: 42601
ERROR org.hibernate.util.JDBCExceptionReporter - Batch entry 0 insert into user_search_list (user, search_list) values ('1', 'bjorn') was aborted. Call getNextException to see the cause.
WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 0, SQLState: 42601
ERROR org.hibernate.util.JDBCExceptionReporter - ERROR: syntax error at or near "user"
Position: 31
- Ich habe den Fehler, die dazu führen mich zu glauben, dass es immer noch mit den Namen der Spalte.
Du musst angemeldet sein, um einen Kommentar abzugeben.
user
ist ein reserviertes Schlüsselwort in PostgreSQL. Es ist nur erlaubt, als quoted identifier.Haben Sie zu zwingen, den Ruhezustand zu verwenden, zitiert
"user"
in dieser INSERT-Befehl.Ich bin nicht Hibernate-Experte, aber vielleicht Hibernate speichern-User-Modell zu Postgres helfen?
Ich bin ein bisschen verwirrt sind Sie bezogen auf eine Spalte oder eine Tabelle namens Benutzer... können Sie die @Tabelle-annotation zu setzen, das der name der Tabelle für die Entität, die in der JPA:
Bin ich am Ende Refactoring der Klasse Benutzer XonamiUser. Das war nicht ganz das, was ich wollte, aber es hat Super geklappt.
Den Hibernate reference manual hat ein Beispiel zeigt, wie definieren Sie den Namen der Tabelle verwendet, um die Elemente der Kollektion. Und es geschieht, um eine benutzerdefinierte Entität zu tun, und definieren Sie die Spalte als
user_id
eher als user.Diese Zuordnung sollte OK sein, für Ihren Fall: