SQLGrammarException:ORA-00904(“无效标识符”)

2024-03-19

我收到 Oracle 错误/org.hibernate.exception.SQLGrammarException当我对使用 JPA 和 Spring 的 Java 类运行 JUnit 测试时:

ORA-00904: "ALIAS"."COLUMN_NAME": invalid identifier

奇怪的是,JUnit 测试在针对开发数据库运行时有效,但在针对我用于持续集成构建的数据库(它们都是 Oracle 数据库)运行时失败。

因此,这表明后一个 d/b 中有一些缺失或错误。但是,我已经双重(和三次)检查了两个数据库中引用的表是否相同,并且包含错​​误引用的列 COLUMN_NAME。

更多信息 - JUnit 测试中调用的 DAO Java 类使用 javax.persistence.EntityManager:

MyClass myObject = entityManager.find(MyClass.class, idNumber);

MyClass JPA 实体类映射到 Oracle 表:

@Configurable
@Entity
@Table(name = "MyTable", schema = "MySchema")
public class MyClass implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "MY_SEQ")
    @SequenceGenerator(name = "MY_SEQ", sequenceName = "MY_SEQ", allocationSize = 1)
    @Column(name = "ID")
    protected BigDecimal id;

    @Column(name = "COLUMN_NAME")
    private String columnName;
    ...
}

两个数据库中的数据库表中的列 COLUMN_NAME 均为 VARCHAR2(50) 并且可为空。

版本:

Java-1.6

春季 - 3.1.1

甲骨文 - 11.2.0.3.0

预先感谢您的任何帮助。


发现问题了。我发现 Hibernate 正在创建的查询(通过添加

<property name="hibernate.show_sql" value="true" />

到我的 data-persistence.xml 文件)并尝试在测试失败的数据库中运行它。发现在实体Java类中,关联的数据库表是这样定义的:

@Table(name = "MyTable", schema = "MySchema")

...这对于开发 d/b 来说效果很好。但是,持续集成数据库的所有表都是在名为其他内容的模式中创建的,因此会出现错误。

感谢大家的帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQLGrammarException:ORA-00904(“无效标识符”) 的相关文章

随机推荐