- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 hibernate 和 spring。但是,当添加 .distinct(true)
时,例如 criteria.select(cb.construct(Customer.class, root.get("Name"))).distinct(true);
.然后我收到以下异常:
Exception in thread "AWT-EventQueue-0" javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not prepare statement
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1387)
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1310)
at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:273)
at org.hibernate.ejb.criteria.CriteriaQueryCompiler$3.getResultList(CriteriaQueryCompiler.java:254)
at com.limitCalculator.dao.FilterDaoImpl.getFilter(FilterDaoImpl.java:83)
at com.limitCalculator.dao.FilterDaoImpl$$FastClassByCGLIB$$a62bf500.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:698)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:96)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:260)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:631)
at com.limitCalculator.dao.FilterDaoImpl$$EnhancerByCGLIB$$6ca0bd06.getFilter(<generated>)
at com.limitCalculator.service.FilterServiceImpl.getFilter(FilterServiceImpl.java:37)
at com.limitCalculator.gui.timerSelection.MainTabPanel.placeSelectionWithButtons(MainTabPanel.java:137)
at com.limitCalculator.gui.timerSelection.MainTabPanel.createLayout(MainTabPanel.java:111)
at com.limitCalculator.gui.timerSelection.MainWindow.createTabBar(MainWindow.java:132)
at com.limitCalculator.gui.timerSelection.MainWindow.makeLayout(MainWindow.java:182)
at com.limitCalculator.gui.timerSelection.MainWindow.access$1(MainWindow.java:172)
at com.limitCalculator.gui.timerSelection.MainWindow$4.run(MainWindow.java:197)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$400(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: org.hibernate.exception.SQLGrammarException: could not prepare statement
at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:82)
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125)
at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:188)
at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareQueryStatement(StatementPreparerImpl.java:159)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1854)
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1831)
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1811)
at org.hibernate.loader.Loader.doQuery(Loader.java:899)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:341)
at org.hibernate.loader.Loader.doList(Loader.java:2516)
at org.hibernate.loader.Loader.doList(Loader.java:2502)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2332)
at org.hibernate.loader.Loader.list(Loader.java:2327)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:490)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:355)
at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:195)
at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1268)
at org.hibernate.internal.QueryImpl.list(QueryImpl.java:101)
at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:264)
... 33 more
Caused by: java.sql.SQLSyntaxErrorException: invalid ORDER BY expression
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCPreparedStatement.<init>(Unknown Source)
at org.hsqldb.jdbc.JDBCConnection.prepareStatement(Unknown Source)
at org.apache.commons.dbcp.DelegatingConnection.prepareStatement(DelegatingConnection.java:281)
at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.prepareStatement(PoolingDataSource.java:313)
at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$5.doPrepare(StatementPreparerImpl.java:161)
at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:182)
... 49 more
我的 hibernate 查询如下所示:
hibernate :
select distinct customer0_.Name as col_0_0_
from Customer customer0_
where (upper(customer0_.Name) like ?) and (upper(customer0_.City) like ?) and
(upper(customer0_.Country) like ?)
order by customer0_.customerNr asc
这就是我正在使用的代码:
@Transactional
@SuppressWarnings("all")
public List<Customer> getFilter(String city, String country) {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Customer> criteria = cb.createQuery(Customer.class);
//which table we want to fetch
final Root root = criteria.from(Customer.class);
List criteriaList = createWhereCritera(city, country, cb, root);
//create statement
criteria.select(cb.construct(Customer.class, root.get("Name"))).distinct(true);
// Pass the criteria list to the where method of criteria query
criteria.where(cb.and((Predicate[]) criteriaList.toArray(new Predicate[0])));
// Order by clause
criteria.orderBy(cb.asc(root.get("customerNr")));
return em.createQuery(criteria).getResultList();
}
public List createWhereCritera(String city, String country, CriteriaBuilder cb,
final Root root) {
// This list will contain all Predicates (where clauses)
List criteriaList = new ArrayList();
// City:
Predicate predicateCity = cb.like(cb.upper(root.get("City")),city);
criteriaList.add(predicateCity);
// Country:
Predicate predicateCountry = cb.like(cb.upper(root.get("Country")),country);
criteriaList.add(predicateCountry);
return criteriaList;
}
有什么建议吗?为什么会出现此问题以及如何获取所有不同的值?
感谢您的回答!
最佳答案
您的查询有误。Order By 中的任何内容都必须是 Select 子句
的一部分。
当存在 ORDER BY
子句时,它是最后执行的。首先,FROM
子句生成用于检查的对象,然后 WHERE 子句选择要收集哪些对象作为结果。然后,SELECT
子句通过计算结果表达式来构建结果。最后,通过计算 ORDER BY
表达式对结果进行排序。
ORDER BY 子句中只允许使用直接从 SELECT 子句中的表达式派生的表达式。以下查询无效,因为 ORDER BY
表达式不是结果的一部分:
SELECT c.name
FROM Country c
WHERE c.population > 1000000
ORDER BY c.population
另一方面,以下查询是有效的,因为给定国家/地区 c,可以从 c 计算 c.population 表达式:
SELECT c
FROM Country c
WHERE c.population > 1000000
ORDER BY c.population
因此将您的查询更改为如下所示。
select distinct (customer0_.Name as col_0_0_), customer0_.customerNr from Customer customer0_ where (upper(customer0_.Name) like ?) and (upper(customer0_.City) like ?) and (upper(customer0_.Country) like ?) order by customer0_.customerNr asc
关于java - unique(true) - 无法准备语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25403470/
我想在 MySQL 中创建一个基本的 users 表。 我不希望数据库中出现重复的电子邮件或重复的用户名。 在创建表时防止这种情况的最佳方法是什么? 和以下有什么区别: 1. UNIQUE(用户名),
不可能将用户或请求识别为唯一,因为欺骗是微不足道的。 但是,有一些方法组合起来可以阻止作弊尝试并为用户提供准独特的地位。 我知道以下内容: IP 地址 - 将每个访问者的 IP 地址存储在某种数据库中
我有 2 个表: attCatAppSet, attCatAppSet_translation 在这两个表上,我对 2 列(不是主键)应用了唯一约束,因此列对值不能重复。 GO ALTER TABLE
我目前有这个: class Committee(models.Model): # ...some fields... committee_xml_id = models.Integer
这个问题在这里已经有了答案: 关闭10 年前。 Possible Duplicate: how to alter live mysql table to make a key non unique
unique() 算法可以在序列中原地移除重复的元素,这就要求被处理的序列必须是正向迭代器所指定的。在移除重复元素后,它会返回一个正向迭代器作为新序列的结束迭代器。可以提供一个函数对象作为可选的第三个
我的模型中有一个这样的字段 name = models.CharField(max_length=100, unique=True) 但现在该表/模型有很多数据,需要更改True 到 False 但无
在 Typeorm 中,您可以在列选项中设置唯一标志,或将列设置为实体的唯一。 你什么时候会使用什么,有什么区别?@Unique(["firstName"]) https://typeorm.io/#
我创建了一个名为 state 的数据集来自内置矩阵state.x77有两个连续变量(人口和收入)和两个因素变量(区域和面积)。 我使用 tapply() 计算了按地区划分的平均收入, by() , a
关于 SQLite 的问题。 在 CREATE TABLE SQL 中,我们可以通过任何一种方式添加 UNIQUE 约束:列约束或表约束。我的问题很简单。它们的工作方式不同吗? 我能找到的唯一区别是,
我在 Django 1.8 中构建模型,我正在使用抽象继承(我假设这是导致问题的原因)。我有抽象模型,然后我有基于这些抽象模型的模型。我在某些模型之间也有 ForeignKey 和 ManyToMan
我见过几个示例表,一个是 UNIQUE INDEX,另一个是 UNIQUE KEY。两者有什么区别??还是两者都一样? 最佳答案 CREATE TABLE KEY 通常是 INDEX 的同义词。 您可
我试着比较了两者,一个是pandas.unique(),另一个是numpy.unique(),我发现后者实际上超过了第一个。 我不确定卓越是否是线性的。 谁能告诉我为什么在代码实现方面存在这种差异?在
使用 PowerShell,我通过“import-csv”将文件中的 csv-data 导入对象 $csvList。这个 csv 数据有一个名为 Benutzer 的列。当做这样的事情时: $csvL
我有一个名为 GroupMembers 的表,它表示参与网站上某些社区的用户列表。 列看起来像这样: groupId | accountId | role 如您所见,里面有一个名为“role”的
我需要一个不会因 Android 设备而改变的 ID,它在任何时候都应该是唯一的,即使 WIFI、SIM 卡、蓝牙不存在,以及当用户重置他/她的手机或刷新新操作系统时也是如此。 我知道这些 Id。IM
假设我有“主题”表 CREATE TABLE subject (id int PRIMARY KEY, name VARCHAR(255) **UNIQUE**) 和相关的映射对象, @Entity
好的,让我解释一下场景。我有一个“订单”表,其中有一个自动增量键“orderno”。该表也有一个字段“orderdate”。我想要的是格式化的订单号。 (orderno_formatted) 采用以下
我有一个 boost::multi_index_container 其元素是这样的结构: struct Elem { A a; B b; C c; }; 主键(在数据库意义上)
当前列是 VARCHAR(255) NOT NULL,那么如何将其更改为 TEXT NOT NULL? 注意:要更改其属性类型的列是另一列的 UNIQUE KEY 组合。例如 唯一键(名称、描述) 列
我是一名优秀的程序员,十分优秀!