程序报错:表或者视图不存在

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了程序报错:表或者视图不存在相关的知识,希望对你有一定的参考价值。

遇到这个报错,主要从2个方面考虑:一是用户的权限问题,二是程序中的表与数据库中的表是否对应,尤其是表名是否写对。

我在持久层使用的是hibernate框架连接的oracle数据库。

我让dba确认了我当前的用户确实是读写权限的,尤其对于我报错的这张表;表现出来的是对于其他的表,insert是没有任何问题的,唯独对于pri_ids_mapping这张表就是死活insert不成功。

后来找到原因:

@Entity
@Table(name = "Pri_Ids_mapping")
public class Pri_Ids_mapping {
    @Id
    @Column(name = "mapId", nullable = false)
    @SequenceGenerator(name = "seq_mapId", sequenceName = "SEQ_mapId",allocationSize= 1)
    @GeneratedValue(generator = "seq_mapId", strategy = GenerationType.SEQUENCE)
    private Long mapId;// 主键

这个表的主键在生成的过程中出现了问题,由于我的序列的名字没有和表名相关联,特别容易被其他表的序列给替代。

而事实上确实有一个另外的库里的表的序列和SEQ_mapId的名字重复。在创建表的时候允许我的用户使用这个序列的同义词;另外一个序列在创建的时候也允许它所在的库的用户使用这个同义词,这样,后来的将原来的覆盖;我现在想要借助序列生成ID,就要涉及到跨库了,这样就出现了访问权限不足的问题。

解决方案:

@Entity
@Table(name = "Pri_Ids_mapping")
public class Pri_Ids_mapping {
    @Id
    @Column(name = "mapId", nullable = false)
    @SequenceGenerator(name = "seq_mapId", sequenceName = "fhl_pms.SEQ_mapId",allocationSize= 1)
    @GeneratedValue(generator = "seq_mapId", strategy = GenerationType.SEQUENCE)
    private Long mapId;// 主键

在使用序列的时候在前面加上库名就可以了。

 

以上是关于程序报错:表或者视图不存在的主要内容,如果未能解决你的问题,请参考以下文章

arcgis添加字段显示表或者视图不存在

Oracle 创建存储过程 提示权限不足或者提示表和视图不存在问题

读取数据库信息构建视图字段的备注信息,方便程序代码生成

读取数据库信息构建视图字段的备注信息,方便程序代码生成

java连接oracle数据库,显示表或视图不存在

PHP常用代码片段