【问题标题】:Invalid identifier: ORA ORA-00904; Hibernate ignoring Intellij-IDEA generated @Column (name="") annotation on getter无效标识符:ORA ORA-00904; Hibernate 忽略 Intellij-IDEA 在 getter 上生成的 @Column (name="") 注释
【发布时间】:2019-10-13 05:08:27
【问题描述】:

我有一个 Spring boot 应用程序 (2.1.5),使用 Hibernate (5.1) 作为我的 JPA 提供程序,使用 Hibernate Dialect Oracle10gDialect 访问 Oracle 11.2.0.4 DB

我已经创建了一个这样的仓库

@Repository
public interface VehStoRepository extends CrudRepository<VehStoEntity, Long>
{
}

我的实体如下

@Entity @Table(name = "VEH_STO", schema = "MySchema") 
public class  VehStoEntity
{
  @Id
  private long eventNo;
  private Long stoType;

  Basic @Column(name = "STO_TYPE", nullable = true, precision = 0) 
  public Long getStoType()
  {
    return stoType;
  }

  public void setStoType(Long stoType)
  {
    this.stoType = stoType;
  }
... 
}

为简洁起见,我已经排除了许多其他字段等。我有 Intellj Idea 生成的持久性映射。

现在,当调用 vehStoRepository.findAll();
我收到以下错误:

原因: org.springframework.dao.InvalidDataAccessResourceUsageException:可以 不提取结果集; SQL [不适用];嵌套异常是 org.hibernate.exception.SQLGrammarException:无法提取结果集

...

原因:java.sql.SQLSyntaxErrorException: ORA-00904: "VEHSTOENT0_"."STOTYPE": 标识符无效

日志显示的我的 SQL 语句是:

休眠:从 MYSCHEMA.VEH_STO vehstoent0_ 中选择 vehstoent0_.stoType 作为 stoType25_0_

我的问题是:hibernate 是否实际上将 ent0 添加到实体名称中,或者这只是奇怪的日志记录,或者这是错误的原因?这是因为我没有为所有表生成一个 ORM 映射模式,只是为我需要的那个?我做错了什么?

【问题讨论】:

    标签: hibernate oracle11g spring-data-jpa spring-boot-jpa


    【解决方案1】:

    this:

    我的 sql 表是一个视图,所以我认为这就是 Intellij 没有创建 @Id 注释的原因。 所以我在字段上手动创建了@Id,但 Intellij 有@Column (name="")

    getter 上的注解,然后 Hibernate 将其忽略。

    我已通过将所有注释移至字段来解决问题。

    【讨论】:

      猜你喜欢
      • 2019-10-08
      • 2021-05-09
      • 1970-01-01
      • 2011-08-27
      • 2011-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-08
      相关资源
      最近更新 更多