当前位置: 首页 > 知识库问答 >
问题:

Hibernate本机查询:无效列名错误SQL-17006

公羊伟志
2023-03-14
package com.abc.def.model;

import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Entity;
import javax.persistence.Embeddable;
import javax.persistence.IdClass;
import java.util.Date;
import java.io.Serializable;



@NamedNativeQuery(name="getMetadata",query="
                  select a.name alias1,a.fullname alias2,
                         b.name alias3,b.age alias4,
                         c.height alias5,c.something alias6,
                         d.otherthing alias7
                  from lame_table_name a,
                       lame_table_name_2 b
                  where a.id = b.id
                     and b.id = c.id 
                     and c.id = d.id 
                     and d.id = :namedparameter
                  order by a.index,b.index
               ",
            resultClass=MetadataModel.class)


  @Entity
  @IdClass(SomeIdClass.class)

  public class MetadataModel{

  @Id @Column("alias1")
  private Type alias1property;

  @Id @Column("alias2")
  private Type2 alias2property;

  @Column("alias3")
  private Type3 alias3property;

  //getters and setters
  }

  @Embeddable
  class SomeIdClass implements Serializable{

  //serialVersionUID line

  @Id @Column("alias1")
  private Type alias1property;

  @Id @Column("alias2")
  private Type2 alias2property;

  //getter and setters
  }
package com.abc.def.model;

import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Entity;
import javax.persistence.Embeddable;
import javax.persistence.IdClass;
import java.util.Date;
import java.io.Serializable;
//other imports for the SqlResultSetMapping



@NamedNativeQuery(name="getMetadata",query="
                  select a.name alias1,a.fullname alias2,
                         b.name alias3,b.age alias4,
                         c.height alias5,c.something alias6,
                         d.otherthing alias7
                  from lame_table_name a,
                       lame_table_name_2 b
                  where a.id = b.id
                     and b.id = c.id 
                     and c.id = d.id 
                     and d.id = :namedparameter
                  order by a.index,b.index
               ",
            resultSetMapping="metaDataMapping")


@SqlResultSetMapping(name="metaDataMapping",
              entities=@EntityResult(entityClass=MetadataModel.class,
                fields = {@FieldResult(name="alias1Property",column="alias1")
                           //so on
                      }

                 )
            )

  @Entity
  @IdClass(SomeIdClass.class)

  public class MetadataModel{


  private Type alias1property;


  private Type2 alias2property;


  private Type3 alias3property;

  //getters and setters
  }

  //composite class, exactly as above

共有1个答案

董翰墨
2023-03-14

我们应该在Oracle的选择列表中有所有的表列。如果我们只保留几列。例如,表Employee有列FirstName、LastName、EmpId和如果有query like。

session.createSQLQuery("Select FirstName from Employee");

上面的查询不起作用。它将抛出无效列错误异常。因此,最好将所有列放在Oracle的Select子句中。

礼貌:一个答案谢谢,拉杰什。

 类似资料:
  • 我的表的结构Product的列为productId,poductName和productPrice类别的列为categoryId,categoryName和categoryproducts的列为categoryId和productId

  • 我对命名查询有问题,但我不明白为什么它不工作。 我是这样定义查询的: 在这里我使用它: 错误:由:组织引起。冬眠HibernateException:命名查询中的错误:getUserRatings

  • 问题内容: 我正在尝试执行以下动态查询,但出现错误:无效的列名’cat’ 如果我将其更改为普通查询,则可以: 任何人都可以指出我的错误吗?谢谢。 问题答案: 由于是varchar,因此需要在其周围包含单引号,并且需要在sql字符串内放置该子句的右括号。 新的代码将是: 查看打印了查询字符串的SQL Fiddle演示 。这将生成一个查询字符串,如下所示:

  • 嗨,我是新来spring boot的。我尝试连接到Oracle并列出相关记录。我的代码是在存根环境中工作的,也就是说没有连接到DB。当我试图从spring连接到数据库时,我得到了编辑2中给出的错误: 家庭控制者 POST实体类 Users实体类 存储库 服务 服务实现 至于我在DB中的表: 附注。我还通过更改存储库尝试了以下操作: 这次我出现了以下错误: 我错过了什么? 提前道谢! 编辑: pom

  • 问题内容: 我在Oracle中有一个表,其中SC_CUR_CODE列为CHAR(3) 当我做: 我看到了,而不是和 是一个java.lang.Character 我怎样才能得到充分的价值和? 问题答案: 似乎Hibernate读取类型为的值。尝试将其转换为: 通过接口使用Hibernate时,您可以改为设置一个结果类型(也可以通过JPA 2.0 访问): 从HHH-2220开始,Hibernate

  • 我想在我的repo中写一个本机查询“Select*in from table”。表名与实体名不同。 运行查询时, 1如果我把实体名称返回表未找到。 2如果我将表名放在查询中,则查询的验证失败。 问题是 如果我使用"Select*from TariffPacks r2..., nativeQuery=true",我得到错误TariffPacks不存在。如果我使用"Select*from RECHAR