我的应用程序使用sqlRestriction方法遇到了一些麻烦:
这是我的电影课:
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 = "";
...
}
当我做那样的事情(虚拟测试)时:
List<Movie> movies = session.createCriteria(Movie.class)
.add(Restrictions.sqlRestriction("1 in (1)"))
.list();
完美无缺。
我的第二次测试(更改限制):
.add(Restrictions.sqlRestriction("Movie.id in (166,171)"))
我的第三次测试
add(Restrictions.sqlRestriction("{Movie}.id in (166,171)"))
他们两个都以同样的方式失败:
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)
...
我做错了什么?
被修改
我试过了:
.add(Restrictions.sqlRestriction("{alias}.id in (?, ?)", new Long[]{166L,171L}, new Type[]{Hibernate.Long, Hibernate.Long}) )
我得到了这个:“长期无法解决或不是一个领域”
似乎“Hibernate。{AnyType}”已弃用,请参阅此链接:Why Hibernate STRING can not be resolved?
我尝试了这个:
.add(Restrictions.sqlRestriction("{alias}.id in (?, ?)", new Long[]{166L,171L}, new Type[]{LongType.INSTANCE, LongType.INSTANCE}) )
但我收到了这个错误:
Caused by: java.sql.SQLSyntaxErrorException: ORA-00904: "THIS_"."ID": invalid identifier
答案 0 :(得分:0)
不确定您是否正确使用别名。试试以下
Restrictions.sqlRestriction("{alias}.pk in (?, ?)", new Long[]{166L,171L}, new Type[]{Hibernate.Long, Hibernate.Long}) )
?
的计数需要与给定数组的大小相同,因此应构建(?,?)
&amp;根据传递的数组动态附加。以及类型数组。
编辑:ID字段名称不是id
,而是pk
,原始答案中错过了@Column(name = "pk")
。较新的hibernate版本没有更多的Hibernate.Long&#39;但请改用LongType.INSTANCE
。
Restrictions.sqlRestriction("{alias}.pk in (?, ?)", new Long[]{166L,171L}, new Type[]{LongType.INSTANCE, LongType.INSTANCE}) )
答案 1 :(得分:0)
解决。 我使用的是hibernate表/字段名称的名称(我的意思是&#34; id&#34;)它被改为&#34; pk&#34;。它工作了!
$("#element").hide();
$("#element").show(1000);
我以为我必须使用HQL表/字段名称。但是phisicall表的名称/字段是正确的!