0

我有一个使用 Hibernate (5.1) 的 Spring Boot 应用程序 (2.1.5) 作为我的 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:无法提取ResultSet;SQL [不适用];嵌套异常是 org.hibernate.exception.SQLGrammarException: could not extract ResultSet

...

引起:java.sql.SQLSyntaxErrorException:ORA-00904:“VEHSTOENT0_”。“STOTYPE”:标识符无效

日志显示我的 SQL 语句是:

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

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

4

1 回答 1

0

这样的:

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

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

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

于 2019-05-28T09:27:08.920 回答