我有一个使用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映射架构,只是为我需要的那个生成了吗?我在做什么错了?
答案 0 :(得分:0)
是this:
我的sql表是一个视图,所以我认为这就是Intellij没有创建@Id
批注的原因。
因此,我在字段上手动创建了@Id,但是Intellij有@Column (name="")
吸气剂上的注释,Hibernate然后忽略了它。
我已经通过将所有注释移到字段来解决了这个问题。