gpt4 book ai didi

Java JPA - 内部连接查询不起作用

转载 作者:行者123 更新时间:2023-11-29 02:57:31 26 4
gpt4 key购买 nike

我目前在将 Java JPA 与 EclipseLink 结合使用时遇到问题 - 此查询:

SELECT  VAR_INPUT.*
FROM VAR_INPUT
INNER JOIN TYPE_VAR_INPUT
ON VAR_INPUT.ID_TYPE_VAR_INPUT = TYPE_VAR_INPUT.ID_TYPE_VAR_INPUT
WHERE TYPE_VAR_INPUT.IS_MANDATORY_TYPE_VAR_INPUT=true;

直接在我的数据库上运行时工作正常,但当我将它与 JPA 一起使用时不起作用。

JPA 查询:

@NamedQuery(name = "VarInput.findAVarInputllOfMandatoryType", 
query = "SELECT v "
+ "FROM VarInput v "
+ "INNER JOIN TypeVarInput t "
+ "ON v.ID_TYPE_VAR_INPUT = t.ID_TYPE_VAR_INPUT "
+ "WHERE t.isMandatoryTypeVarInput=:isMandatoryTypeVarInput"),

当我在我的 Java 应用程序中执行它时,出现以下错误:“此表达式中的字段 [VAR_INPUT.ID_VAR_INPUT] 在此上下文中具有无效表。”

Exception in thread "AWT-EventQueue-0" Local Exception Stack: 
Exception [EclipseLink-6069] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.QueryException
Exception Description: The field [VAR_INPUT.ID_VAR_INPUT] in this expression has an invalid table in this context.
Query: ReadAllQuery(name="VarInput.findAVarInputllOfMandatoryType" referenceClass=VarInput jpql="SELECT v FROM VarInput v INNER JOIN TypeVarInput t ON v.ID_TYPE_VAR_INPUT = t.ID_TYPE_VAR_INPUT WHERE t.isMandatoryTypeVarInput=:isMandatoryTypeVarInput")
at org.eclipse.persistence.exceptions.QueryException.invalidTableForFieldInExpression(QueryException.java:749) at org.eclipse.persistence.exceptions.QueryException.invalidTableForFieldInExpression(QueryException.java:749)
at org.eclipse.persistence.internal.expressions.FieldExpression.validateNode(FieldExpression.java:296)

我的表格看起来像这样:

Table VAR_INPUT(ID_VAR_INPUT, NAME_VAR_INPUT, ID_TYPE_VAR_INPUT)
Table TYPE_VAR_INPUT(ID_TYPE_VAR_INPUT, NAME_TYPE_VAR_INPUT, IS_MANDATORY_VAR_INPUT)
"VAR_INPUT ManyToOne TYPE_VAR_INPUT"

你知道为什么会这样吗?

注意:实体是由 NetBeans 生成的

最佳答案

您在 JQPL 中不像那样使用 inner join,而是在实体字段上加入。我现在猜是因为你没有提供实体代码,但试试这个

@NamedQuery(name = "VarInput.findAVarInputllOfMandatoryType", 
query = "SELECT v "
+ "FROM VarInput v "
+ "join v.type t "
+ "WHERE t.isMandatoryTypeVarInput=:isMandatoryTypeVarInput")

在这种情况下你甚至不需要join,你可以简化查询到这个(隐式使用inner join)

@NamedQuery(name = "VarInput.findAVarInputllOfMandatoryType", 
query = "SELECT v "
+ "FROM VarInput v "
+ "WHERE v.type.isMandatoryTypeVarInput=:isMandatoryTypeVarInput")

关于Java JPA - 内部连接查询不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28903361/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com