SEVERE: Local Exception Stack:
Exception [EclipseLink-7092] (Eclipse Persistence Services - 2.0.0.v20091127-r5931):
org.eclipse.persistence.exceptions.ValidationException
Exception Description: Cannot add a query whose types conflict with an existing query.
Query To Be Added: [ReadAllQuery(name="Voter.findAll" referenceClass=Voter
jpql="SELECT v FROM Voter v")] is named: [Voter.findAll] with arguments [[]].
The existing conflicting query: [ReadAllQuery(name="Voter.findAll" referenceClass=
Voter jpql="SELECT v FROM Voter v")] is named: [Voter.findAll] with arguments: [[]].
8 回答
我也遇到过这个问题,没有什么意义。我只有一个带有一个已定义查询的实体 bean,它继续告诉我这是问题所在。我停下来,然后启动 GF3,重新部署我的应用程序,我仍然得到它.. 更糟糕的是,我什至没有使用查询。
我不明白的一件事..为什么在 GF 中使用 EclipseLink?那是GF的一部分吗?我使用 Eclipse IDE,但我不从 Eclipse 中进行部署。我在命令行中从我的 ant 构建脚本进行部署。我猜 GF 一定是在使用一些 EclipseLink(以前是 TopLink?)。
上面的一个答案是确保没有过时的文件,取消部署应用程序等。如果已经弄清楚这一点的人可以提供更多详细信息并进行解释,那就太好了。如果它是另一个有错误的查询,那么如果显示错误而不是这个误导性的错误肯定会很好。
到目前为止,我已经停止了 GF,删除了所有表,重新启动,重新部署(在 autodeploy 文件夹中),但仍然立即得到这个问题。我通常会在短时间内多次构建/部署到自动部署文件夹,因为我会进行快速更改然后构建/重新部署。
我也遇到了这个问题,我发现异常与错误文件根本无关,问题来自另一个查询,例如:@NamedQuery(name = "ChannelType.ALL", query = "SELECT channelType FROM ChannelType channelType WHERE channelType.applicationClient.applicationClientId =:applicationClientId ORDER BY channelType.channelTypId ASC")
问题来自“ORDER BY channelType.channelTypId”,除了按主键排序,当我删除此行时,异常也消失了。
也许其他人可以解释为什么会发生这种情况。谢谢
仅针对仍在为该错误而苦苦挣扎的人们:
取消部署您的应用程序并检查是否还有任何陈旧(可能已锁定)的文件。这将导致旧的命名查询仍然存在,因此不会替换它们。
删除文件并重新部署。错误应该消失。
编辑:还要检查你是否没有做过类似WHERE o.object_id = :id
......而不是WHERE o.object = :object
......
这是我的问题的解决方案。我花了 3 周时间才弄清楚这一点。当涉及到异常时,EclipseLink 不是很清楚。实际上有一个查询编译错误。相反,它会引发重复的查询异常。
看起来您已经定义了两次查询。要么在同一个实体上,要么在另一个实体上,要么在orm.xml
错误也可能来自格式错误的命名查询,我有一个 where y o.activo -> 向我显示指定的错误。
我遇到了问题......真正的异常是@Named Query 格式错误,但堆栈跟踪只是说:
“异常描述:无法添加类型与现有查询冲突的查询”
我的解决方案:
在持久性单元中,将 Table Generation Strategy 更改为“None”,将 Validation Strategy 更改为“None”。再次运行时,我获得了真正的异常(格式错误的查询)。我解决了查询中的错误,返回到持久化单元中的旧配置,所有异常都消失了。
我快疯了,但至少,这不起作用:
@NamedQuery(name = "xyx", query = "SELECT count(v) FROM Classe v WHERE v.id =:_id);
这有效:
@NamedQuery(name = "xyx", query = "SELECT count(v) FROM Classe v WHERE v.id = :_id);
"WHERE v.id =:_id"
是错误
由于您没有显示任何代码,因此不确定您在做什么,但这是 EclipseLink 文档中关于错误 ECLIPSELINK-07092 的说明:
ECLIPSELINK-07092:无法添加类型与现有查询冲突的查询。要添加的查询:[{0}] 命名为:[{1}],参数为 [{2}]。现有的冲突查询:[{3}] 命名为:[{4}],参数为:[{5 }]。
原因:EclipseLink 检测到具有相同名称的自定义查询和会话参数之间存在冲突。
行动:确保没有多次向会话添加查询或更改查询名称,以便可以将查询与其他查询区分开来。
根据上面的描述和跟踪,您似乎在会话中多次添加具有相同查询名称的查询(实际上是相同的)。您不应该(或使用其他查询名称)。