我有一个使用 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 映射模式,只是为我需要的那个?我究竟做错了什么?