在netbeans中使用JPA将数据插入数据的例外情况

时间:2010-04-28 06:58:16

标签: java orm netbeans jpa eclipselink

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 个答案:

答案 0 :(得分:3)

我也遇到过这个问题而且没什么意义。我只有一个实体bean有一个定义的查询,它继续告诉我这是问题所在。我做了一个停止,然后开始GF3,重新部署我的应用程序,我仍然得到它...更糟糕的是,我甚至没有使用查询。

有一点我不明白..为什么EclipseLink在GF中使用?这是GF的一部分吗?我使用的是Eclipse IDE,但是我没有从Eclipse中部署。我从命令行的ant构建脚本部署。我猜GF必须使用一些EclipseLink(以前是TopLink?)。

上面的一个答案是确保没有陈旧的文件,取消部署应用程序等。如果有人想出这个可以提供更多细节并解释它,那将会很棒。如果它是另一个有错误的查询,那么如果显示错误而不是这个误导性错误肯定会很好。

到目前为止,我已经停止了GF,删除了所有表,重新启动,重新部署(在autodeploy文件夹中),并且仍然立即得到此问题。我通常会在短时间内多次构建/部署到autodeploy文件夹,因为我会快速更改然后构建/重新部署。

答案 1 :(得分:2)

只是那些仍在努力解决这个错误的人:

取消部署您的应用程序并检查是否有任何陈旧(可能已锁定)的文件。这将导致旧的命名查询仍然存在,因此不会替换它们。

删除文件并重新部署。错误应该消失。

编辑: 还要检查您是否还没有做过...... WHERE o.object_id = :id ...而不是... WHERE o.object = :object ...

这是解决我的问题的方法。花了我3个星期来解决这个问题。 EclipseLink在异常方面不是很清楚。实际上有一个查询编译错误。相反,它会抛出重复的查询异常。

答案 2 :(得分:2)

我也遇到了这个问题,我发现异常与错误文件根本没有关系,问题是来自另一个查询例如: @NamedQuery(name =“ChannelType.ALL”,query =“SELECT channelType FROM ChannelType channelType WHERE channelType.applicationClient.applicationClientId =:applicationClientId ORDER BY channelType.channelTypId ASC”)

问题来自“ORDER BY channelType.channelTypId”,除了按主键排序外,当我删除此行时,异常也消失了。

也许其他人可以解释为什么会这样。 感谢

答案 3 :(得分:1)

看起来您已经定义了两次查询。在同一实体上,在另一个实体上,或在orm.xml

答案 4 :(得分:0)

由于您没有显示任何代码,因此不确定您正在做什么,但这是EclipseLink文档中有关错误的说明ECLIPSELINK-07092:

  

ECLIPSELINK-07092:无法添加类型与其冲突的查询   现有查询。要添加的查询:   [{0}]以参数命名:[{1}]   [{2}]。现有的冲突查询:   [{3}]名为:[{4}],带参数:   [{5}]。
      原因:EclipseLink检测到自定义之间存在冲突   查询具有相同的名称和参数   参加会议       操作:确保不会多次向会话添加任何查询   或更改查询名称以便   查询可以区分   其他

根据以上描述和跟踪,您似乎在会话中多次添加具有相同查询名称的查询(实际上相同)。您不应该(或使用其他查询名称)。

答案 5 :(得分:0)

此错误也可能来自命名查询格式错误,我有一个y o.activo - >这告诉我指定的错误。

答案 6 :(得分:0)

我疯了,但至少,这不起作用:

@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"是错误

答案 7 :(得分:0)

我遇到了问题...... 真正的异常是@Named Query格式错误,但堆栈跟踪只是说:

  

“异常说明:无法添加类型与之冲突的查询   现有的查询“

我的解决方案:

在持久性单元中,将表生成策略更改为“无”,将验证策略更改为“无”。再次运行时,我获得了真正的异常(格式错误的查询)。我解决了查询中的错误,返回到持久性单元中的旧配置,所有异常都消失了。