无效的标识符:ORA ORA-00904; Hibernate在getter上忽略Intellij-IDEA生成的@Column(name =“”)批注

时间:2019-05-27 15:52:27

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

我有一个使用Hibernate(5.1)作为我的JPA提供程序的Spring引导应用程序(2.1.5),并使用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:可以   不提取ResultSet; SQL [n / a];嵌套异常为   org.hibernate.exception.SQLGrammarException:无法提取ResultSet

     

...

     

原因:java.sql.SQLSyntaxErrorException:ORA-00904:“ VEHSTOENT0 _”。“ STOTYPE”:无效的标识符

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

  

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

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

1 个答案:

答案 0 :(得分:0)

this

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

吸气剂上的注释,Hibernate然后忽略了它。

我已经通过将所有注释移到字段来解决了这个问题。