java.sql.SQLException:尝试检索视图条目时列名无效
Posted
技术标签:
【中文标题】java.sql.SQLException:尝试检索视图条目时列名无效【英文标题】:java.sql.SQLException: Invalid column name when trying to retrieve the entries of a view 【发布时间】:2020-11-24 19:43:56 【问题描述】:已解决:在 VW_MYVIEW 中添加了新列(用于 id)
我创建了一个 view,其中包含一个脚本和一个 java 类,它将包含视图中的所有列。 但是当我尝试从视图中获取结果列表时,我收到:invalid column name exception。 这就是我获取数据的方式:
Query query = entityManager.createNativeQuery("select * from VW_MYVIEW", MyView.class);
List<MyView> list = return query.getResultList();
下面是我的观点和我的 java 类。我的视图中没有 id,所以我添加了:
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
因为它抱怨需要一个 id。
VW_MYVIEW
COLUMN_NAME | DATA_TYPE
name | varchar(45)
text | varchar(20)
nr | number
@Entity
@Table(name = "VW_MYVIEW")
public class MyView implements Serializable
private static final long UID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name = "name")
private String name;
@Column(name = "text")
private String text;
@Column(name = "nr")
private Long nr;
public String getName()
return name;
public void setName(String name)
this.name = name;
public String getText()
return text;
public void setText(String text)
this.text = text;
public Long getNr()
return nr;
public void setNr(Long nr)
this.nr = nr;
如果您对我为什么会收到该异常有任何想法,请随时发表评论。
例外:
**Caused by: java.sql.SQLException: Invalid column name
at oracle.jdbc.driver.OracleStatement.getColumnIndex(OracleStatement.java:3757)
at oracle.jdbc.driver.InsensitiveScrollableResultSet.findColumn(InsensitiveScrollableResultSet.java:264)
at oracle.jdbc.driver.GeneratedResultSet.getLong(GeneratedResultSet.java:558)
at com.zaxxer.hikari.pool.HikariProxyResultSet.getLong(HikariProxyResultSet.java)
at org.hibernate.type.descriptor.sql.BigIntTypeDescriptor$2.doExtract(BigIntTypeDescriptor.java:63)
at org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:47)
at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:261)
at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:257)
at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:247)
at org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:333)
at org.hibernate.loader.Loader.extractKeysFromResultSet(Loader.java:794)
at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:719)**
【问题讨论】:
我在 Internet 上看到的所有代码示例都要求您枚举字段,如SELECT field1, field2, field3 FROM sometable
。
我试过了,stii不工作:(
同样的错误? ....
是的。这可能是我在java类中添加的id的问题,但我不确定..
好的,我认为错误消息的含义正是它所说的。检查 MyView 类中的每个列名;确保它与 SQL 和表中的列名精确对齐。
【参考方案1】:
type
是a reserved word in Oracle。
最好的方法是将此列重命名为非保留字。如果你不能这样做,你需要逃避它。例如:
@Column(name = "\"type\"")
private String type;
【讨论】:
这里只是用来问这个问题的列名(我不使用列'type''),我会修改列名(我没有灵感)。对不起..以上是关于java.sql.SQLException:尝试检索视图条目时列名无效的主要内容,如果未能解决你的问题,请参考以下文章
我在尝试从其他方法访问此返回的 resultSetCustomer. 时收到错误“java.sql.SQLException:结果集结束后”
: java.sql.SQLException: 尝试使用 Databricks Connect 在 Databricks 集群上运行 Python 脚本时没有合适的驱动程序
插入错误:java.sql.SQLException:ORA-00911:无效字符
java.sql.SQLException: SQL 语句在 org.hsqldb.jdbc.JDBCUtil.sqlException 处关闭