ich einige Probleme in meiner App sqlRestriction Methode haben:Token SQL92 nicht unterstützt
Das ist mein Film Klasse:
public class Movie {
@Id
@Column(name = "pk")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "movie_seq")
@SequenceGenerator(name = "movie_seq", sequenceName = "movie_seq", allocationSize = 1, initialValue = 1)
public long id;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
@Column(name = "name")
public String str_name = "";
...
}
Wenn ich etwas tun, wie dieser (Blindtest):
List<Movie> movies = session.createCriteria(Movie.class)
.add(Restrictions.sqlRestriction("1 in (1)"))
.list();
Es funktioniert perfekt.
Mein zweiter Test (die Einschränkung zu ändern):
.add(Restrictions.sqlRestriction("Movie.id in (166,171)"))
Und mein dritter Test
add(Restrictions.sqlRestriction("{Movie}.id in (166,171)"))
Beide auf die gleiche Art und Weise versagt:
ERROR: Token SQL92 no soportado en la posición: 345
Exception in thread "main" org.hibernate.exception.GenericJDBCException: could not extract ResultSet
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:47)
...
Caused by: java.sql.SQLException: Token SQL92 no soportado en la posición: 345
at oracle.jdbc.driver.OracleSql.handleODBC(OracleSql.java:1275)
...
Was bin ich falsch machen?
Edited
Ich habe versucht:
.add(Restrictions.sqlRestriction("{alias}.id in (?, ?)", new Long[]{166L,171L}, new Type[]{Hibernate.Long, Hibernate.Long}))
Und ich habe dies: "Hibernate {anyType}" "Lange kann nicht aufgelöst werden oder ist kein Feld"
Es scheint, ist veraltet, siehe diesen Link: Why Hibernate STRING can not be resolved?
Ich habe dies stattdessen versucht:
.add(Restrictions.sqlRestriction("{alias}.id in (?, ?)", new Long[]{166L,171L}, new Type[]{LongType.INSTANCE, LongType.INSTANCE}))
Aber ich habe diesen Fehler:
Caused by: java.sql.SQLSyntaxErrorException: ORA-00904: "THIS_"."ID": invalid identifier
nur neugierig war das neueste mit 'öffentlichen Long-ID' oder' öffentlichen Long-ID'? aber es scheint, dass der Alias nicht korrekt eingestellt ist – pirho
Schließlich wurde der Fehler gerade erkannt.Ich benutzte den Namen der Hibernate-Tabelle/Feldnamen (ich meine "id") es wurde in "pk" geändert. und es hat funktioniert!. .add (Einschränkungen.sqlRestriction ("pk in (?,?)", Neue Long [] {166L, 171L}, neue Art [] {LongType.INSTANCE, LongType.INSTANCE})) Ich dachte, ich habe um die HQL-Tabellen-/Feldnamen zu verwenden. Aber die Namen/Felder der Phisicall-Tabelle sind korrekt! Beantworten Sie Ihre Frage: Ich verwende dies: @Column (name = "pk") öffentliche lange id; Ich schätze sehr Ihre Hilfe – Lev
natürlich. Ich verpasste '@Column (name =" pk ")' und 'sqlRestriction' es ist native sql NICHT JPQL: D. Nun, lernte etwas Neues – pirho