从同一数据库的另一个模式访问序列时序列不存在错误
Sequence doesnot exist error while accessing sequence from another schema of same DB
我的数据库中有两个模式。
一个是 "admin" 架构,另一个是 "user" 架构。
我在 "admin" 模式中创建了一个序列。我的 weblogic ejb 应用程序从 weblogic-cmp-jar.xml 文件中读取数据库详细信息,如数据源名称、table 名称、列、模式名称。在数据源名称中,我为 "user" 模式提供了 DS。我需要我的应用程序正确读取数据库属性并填充 ejb bean。
但是,我在更新数据库中的记录时遇到以下错误(序列不存在):
> WARN - com.abc.xyz.SomeHandlerEJB_vhem4v_Impl - [ACTIVE]
> ExecuteThread: '3' for queue: 'weblogic.kernel.Default (self-tuning)'
> - update
> javax.ejb.TransactionRolledbackLocalException: EJB Exception:
> at weblogic.ejb.container.internal.EJBRuntimeUtils.asTxRollbackLocalException(EJBRuntimeUtils.java:151)
> at weblogic.ejb.container.internal.BaseLocalObject.handleSystemException(BaseLocalObject.java:471)
> at weblogic.ejb.container.internal.BaseEJBLocalHome.handleSystemException(BaseEJBLocalHome.java:102)
> at weblogic.ejb.container.internal.EntityEJBLocalHome.create(EntityEJBLocalHome.java:171)
> at weblogic.ejb.container.internal.EntityEJBLocalHome.create(EntityEJBLocalHome.java:133)
Caused by: javax.ejb.EJBException: ORA-02289: sequence does not exist
at weblogic.ejb.container.cmp.rdbms.RDBMSPersistenceManager.execGenKeyQuery(RDBMSPersistenceManager.java:4434)
at weblogic.ejb.container.cmp.rdbms.RDBMSPersistenceManager.getNextGenKeyPreFetch(RDBMSPersistenceManager.java:4356)
at weblogic.ejb.container.cmp.rdbms.RDBMSPersistenceManager.getNextSequenceKey(RDBMSPersistenceManager.java:4309)
at
这是我的 weblogic-cmp-jar.xml 文件的内容:
<weblogic-rdbms-bean>
<ejb-name>MyEJB</ejb-name>
<data-source-name>jdbc/MyDS</data-source-name>
<table-map>
<table-name>my_table</table-name>
<field-map>
<cmp-field>messageId</cmp-field>
<dbms-column>messageId</dbms-column>
</field-map>
----------
----------
</table-map>
<automatic-key-generation>
<generator-type>Oracle</generator-type>
<generator-name>SEQ_MYSEQNAME</generator-name>
<key-cache-size>1</key-cache-size>
</automatic-key-generation>
</weblogic-rdbms-bean>
以下是我观察到的行为:
<generator-name>SEQ_MYSEQNAME</generator-name> // does not work
<generator-name>ADMIN.SEQ_MYSEQNAME</generator-name> // works fine
在来自--user-- schema 的数据库中,如果我得到以下结果:
select * from user_sequences // It does not show anything.
select * from ALL_SEQUENCES // It displays the sequence names.
我想只使用序列名称而不使用序列所有者。
我正在使用下面的 s/w 堆栈:
- 网络逻辑 12c
- 甲骨文数据库 12g
- Java1.8
我觉得在您的 USER Schema 中添加以下 SYNONYM
即可完成工作。
CREATE OR REPLACE EDITIONABLE SYNONYM SEQ_MYSEQNAME FOR "ADMIN"."SEQ_MYSEQNAME";
除了用户模式中的这一添加之外,不需要在 Weblogic/应用程序配置中进行任何其他更改。
就我而言,SYNONYM SEQ_MYSEQNAME FOR "ADMIN"."SEQ_MYSEQNAME"
已在数据库中创建。我们删除了现有的 SYNONYM,并使用适当的权限重新创建了相同的 SYNONYM。这解决了我的问题。
我的数据库中有两个模式。 一个是 "admin" 架构,另一个是 "user" 架构。
我在 "admin" 模式中创建了一个序列。我的 weblogic ejb 应用程序从 weblogic-cmp-jar.xml 文件中读取数据库详细信息,如数据源名称、table 名称、列、模式名称。在数据源名称中,我为 "user" 模式提供了 DS。我需要我的应用程序正确读取数据库属性并填充 ejb bean。
但是,我在更新数据库中的记录时遇到以下错误(序列不存在):
> WARN - com.abc.xyz.SomeHandlerEJB_vhem4v_Impl - [ACTIVE]
> ExecuteThread: '3' for queue: 'weblogic.kernel.Default (self-tuning)'
> - update
> javax.ejb.TransactionRolledbackLocalException: EJB Exception:
> at weblogic.ejb.container.internal.EJBRuntimeUtils.asTxRollbackLocalException(EJBRuntimeUtils.java:151)
> at weblogic.ejb.container.internal.BaseLocalObject.handleSystemException(BaseLocalObject.java:471)
> at weblogic.ejb.container.internal.BaseEJBLocalHome.handleSystemException(BaseEJBLocalHome.java:102)
> at weblogic.ejb.container.internal.EntityEJBLocalHome.create(EntityEJBLocalHome.java:171)
> at weblogic.ejb.container.internal.EntityEJBLocalHome.create(EntityEJBLocalHome.java:133)
Caused by: javax.ejb.EJBException: ORA-02289: sequence does not exist
at weblogic.ejb.container.cmp.rdbms.RDBMSPersistenceManager.execGenKeyQuery(RDBMSPersistenceManager.java:4434)
at weblogic.ejb.container.cmp.rdbms.RDBMSPersistenceManager.getNextGenKeyPreFetch(RDBMSPersistenceManager.java:4356)
at weblogic.ejb.container.cmp.rdbms.RDBMSPersistenceManager.getNextSequenceKey(RDBMSPersistenceManager.java:4309)
at
这是我的 weblogic-cmp-jar.xml 文件的内容:
<weblogic-rdbms-bean>
<ejb-name>MyEJB</ejb-name>
<data-source-name>jdbc/MyDS</data-source-name>
<table-map>
<table-name>my_table</table-name>
<field-map>
<cmp-field>messageId</cmp-field>
<dbms-column>messageId</dbms-column>
</field-map>
----------
----------
</table-map>
<automatic-key-generation>
<generator-type>Oracle</generator-type>
<generator-name>SEQ_MYSEQNAME</generator-name>
<key-cache-size>1</key-cache-size>
</automatic-key-generation>
</weblogic-rdbms-bean>
以下是我观察到的行为:
<generator-name>SEQ_MYSEQNAME</generator-name> // does not work
<generator-name>ADMIN.SEQ_MYSEQNAME</generator-name> // works fine
在来自--user-- schema 的数据库中,如果我得到以下结果:
select * from user_sequences // It does not show anything.
select * from ALL_SEQUENCES // It displays the sequence names.
我想只使用序列名称而不使用序列所有者。
我正在使用下面的 s/w 堆栈:
- 网络逻辑 12c
- 甲骨文数据库 12g
- Java1.8
我觉得在您的 USER Schema 中添加以下 SYNONYM
即可完成工作。
CREATE OR REPLACE EDITIONABLE SYNONYM SEQ_MYSEQNAME FOR "ADMIN"."SEQ_MYSEQNAME";
除了用户模式中的这一添加之外,不需要在 Weblogic/应用程序配置中进行任何其他更改。
就我而言,SYNONYM SEQ_MYSEQNAME FOR "ADMIN"."SEQ_MYSEQNAME"
已在数据库中创建。我们删除了现有的 SYNONYM,并使用适当的权限重新创建了相同的 SYNONYM。这解决了我的问题。