JPA DB2-删除表后获取SQLCODE“-204”、SQLSTATE“42704”和SQLCODE=-727、SQLSTATE=56098

JPA DB2-删除表后获取SQLCODE“-204”、SQLSTATE“42704”和SQLCODE=-727、SQLSTATE=56098,jpa,db2,Jpa,Db2,我们的一张桌子掉下来后,我遇到了一个恼人的问题 我试图持久化一个实体,但每次我调用persist。。。在它上面,我收到以下错误消息: 由以下原因引起:com.ibm.db2.jcc.am.SqlException:隐式操作3期间发生错误。SQLCODE-204、SQLSTATE 42704和来自消息MYDB2SCHEMA.TB_ABCD.的令牌。。SQLCODE=-727,SQLSTATE=56098,DRIVER=4.12.56 看起来它找不到MYDB2SCHEMA.TB_ABCD,当然找不到

我们的一张桌子掉下来后,我遇到了一个恼人的问题

我试图持久化一个实体,但每次我调用persist。。。在它上面,我收到以下错误消息:

由以下原因引起:com.ibm.db2.jcc.am.SqlException:隐式操作3期间发生错误。SQLCODE-204、SQLSTATE 42704和来自消息MYDB2SCHEMA.TB_ABCD.的令牌。。SQLCODE=-727,SQLSTATE=56098,DRIVER=4.12.56

看起来它找不到MYDB2SCHEMA.TB_ABCD,当然找不到,因为DBA上周删除了它。但这很奇怪,因为我试图持久化的实体与MYDB2SCHEMA.TB_ABCD实体没有关系,我们称之为ABCDEntity

为了让事情变得更复杂,我删除了ABCDEntity,这样就没有与它相关的实体了,然后我在整个项目中搜索了MYDB2SCHEMA.TB_ABCD,也没有任何内容,但仍然得到了相同的错误

我试图在DB2中持久化的表与死表没有任何关系,我不是DBA,但我相信如果它与死表有任何关系,它会在删除过程中被删除


那么,如果不再存在与该表相关的实体/表,为什么DB2或JPA仍在尝试查找该表呢?

数据库中肯定还有其他对象,例如触发器或视图,引用了删除的表。DB2尝试在引用该对象时重新验证该对象。如果跟踪持久性框架生成的确切SQL语句,您可能会更好地了解发生了什么

如果出于某种原因,您无法要求DB2找出有问题的对象,您可以尝试此查询,以找到哪些其他对象仍然依赖于缺少的表:

with t(s,n) as (values ('YOURSCHEMA','YOURTABLE'))
select 'control'    as object_type, 
       dschema      as schema, 
       dname        as name, 
       case dtype when 'y' then 'row permission' when '2' then 'column mask' else 'unknown' end as depend_type
from syscat.controldep join t on btype = 'T' and (bschema,bname) = (s,n)
union all
select 'datatype'   as object_type, 
       typeschema   as schema, 
       typename     as name, 
       case when typemodulename is not null then 'in module '|| typemodulename else '' end as depend_type
from syscat.datatypedep join t on btype = 'T' and (bschema,bname) = (s,n)
union all
select 'index'      as object_type, 
       indschema    as schema, 
       indname      as name, 
       ''           as depend_type
from syscat.indexdep join t on btype = 'T' and (bschema,bname) = (s,n)
union all
select 'package'    as object_type, 
       pkgschema    as schema, 
       pkgname      as name, 
       ''           as depend_type
from syscat.packagedep join t on btype = 'T' and (bschema,bname) = (s,n)
union all
select 'routine'    as object_type, 
       routineschema    as schema, 
       specificname     as name, 
       case when routinemodulename is not null then 'in module '|| routinemodulename else '' end as depend_type
from syscat.routinedep join t on btype = 'T' and (bschema,bname) = (s,n)
union all
select 'table-ish'  as object_type, 
       tabschema    as schema, 
       tabname      as name, 
       case dtype when 'S' then 'MQT'
                  when 'T' then 'staging table'
                  when 'V' then 'view'
                  when '7' then 'synopsis table'
                  else dtype end as depend_type
from syscat.tabdep join t on btype = 'T' and (bschema,bname) = (s,n)
union all
select 'trigger'    as object_type, 
       trigschema   as schema, 
       trigname     as name, 
       ''           as depend_type
from syscat.trigdep join t on btype = 'T' and (bschema,bname) = (s,n)
union all
select 'global var'     as object_type, 
       varschema        as schema, 
       varname          as name, 
       case when varmodulename is not null then 'in module '|| varmodulename else '' end as depend_type
from syscat.variabledep join t on btype = 'T' and (bschema,bname) = (s,n)