簡體   English   中英

JPA DB2-刪除表后獲取SQLCODE“ -204”,SQLSTATE“ 42704”和SQLCODE = -727,SQLSTATE = 56098

[英]JPA DB2 - Getting SQLCODE “-204”, SQLSTATE “42704” and SQLCODE=-727, SQLSTATE=56098 after dropping table

在我們的一張桌子掉下來之后,我遇到了一個煩人的問題。

我試圖持久化一個實體,但是每次我在其上調用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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM