weblogic自动增长主键

WebLogic Server 对于 CMP 实体 Bean 支持自动主键生成功能。 仅简单(非复合)主键支持此功能。


WebLogic Server 支持两种自动主键生成方法:

  • 本地数据库主键生成 – 由数据库生成主键。要启用此功能,请在 weblogic-cmp-jar.xml 的 <automatic-key-generation> 元素中指定数据库和生成器的名称。容器将基于配置的值生成从数据库获取主键的代码。仅 Oracle 和 Microsoft SQL Server 数据库支持此功能。另外,请参阅声明主键字段类型中的说明。
  • 从 SEQUENCE 表生成主键。


无论使用哪种主键生成方法,都请参阅声明主键字段类型中的说明。


为 Oracle 指定自动键生成


Oracle 数据库的生成主键支持使用 Oracle 数据库中的 SEQUENCE 实体来生成唯一的主键。需要新的编号时,将调用 Oracle SEQUENCE。在 weblogic-cmp-jar.xmlautomatic-key-generation 元素中指定自动键生成。在 generator-name 元素中指定 Oracle SEQUENCE 的名称。如果在创建 Oracle SEQUENCE 时使用了 SEQUENCE INCREMENT,则应指定 key-cache-sizekey-cache-size 的值必须与 Oracle SEQUENCE INCREMENT 的值匹配。如果这两个值不同,则可能生成重复键。


使用 Oracle SEQUENCE 对象生成主键时:

  • 对于 Oracle 请勿将 generator-type 设置为 USER_DESIGNATED_TABLE。执行此操作会将 TX ISOLATION LEVEL 设置为 SERIALIZABLE,从而可能导致以下异常:

  • javax.ejb.EJBException: nested exception is:
    java.sql.SQLException: Automatic Key Generation Error: attempted to
    UPDATE or QUERY NAMED SEQUENCE TABLE NamedSequenceTable, but
    encountered SQLException java.sql.SQLException: ORA-08177: can't
    serialize access for this transaction.


    对于 Oracle 应使用“自动键”选项。

  • 在此版本中,WebLogic Server 不支持对 SEQUENCE Schema 对象应用 Oracle 的同义词功能。如果将使用 SEQUENCE 的同义词的应用程序从 WebLogic Server 8.1 之前的版本迁移到此版本,将生成下列错误:

  • [EJB:011066]During EJB deployment, error(s) were
    encountered while setting up The ORACLE SEQUENCE named 'XXX' with
    INCREMENT value '1'


    [EJB:011064]The ORACLE SEQUENCE named 'XXX' with INCREMENT '1' was not found in the database'



为 Microsoft SQL Server 指定自动键生成


对于 Microsoft SQL Server 数据库的生成主键支持使用 SQL Server 的 IDENTITY 列。在创建 Bean 并在数据库表中插入新行后,SQL Server 会自动将下一个主键值插入指定为 IDENTITY 列的列中。

注意:有关创建包含 IDENTITY 列的 SQL Server 表的说明,请参阅 Microsoft 文档。



在表中创建 IDENTITY 列后,应在 weblogic-cmp-jar.xml 中指定自动键生成,如下所示。


<automatic-key-generation>
<generator-type>SQLServer</generator-type>
</automatic-key-generation>



使用命名的序列表生成主键


序列表是一种数据库中立的主键生成方式。序列表保留单一性递增的整数序列值,该值将在创建 Bean 实例时用作这些实例中的主键值。


创建一个名为 SEQUENCE 的表来保留当前的主键值。该表由一行和一列组成,如以下语句所定义:


CREATE table_name (SEQUENCE int)
INSERT into table_name VALUES (0)



要使用此功能,请确保底层数据库支持 Serializable 事务隔离级别。Serializable 值指示将一个事务同时执行多次与按顺序多次执行该事务的效果相同。对于有多个服务器实例并发访问序列表的 WebLogic Server 群集,这一点十分重要。请参阅数据库文档,以确定它所支持的隔离级别。


weblogic-cmp-jar.xml 文件中指定自动键生成,如下所示。另外,请参阅声明主键字段类型中的说明。


<automatic-key-generation>
<generator-type>NamedSequenceTable</generator-type>
<generator_name>MY_SEQUENCE_TABLE_NAME</generator-name>
<key-cache-size>100</key-cache-size>
</automatic-key-generation>



generator-name 元素中指定序列表的名称。


key-cache-size 元素中指定键缓存的大小(容器在一次 DBMS 调用中提取的键数)。BEA 建议将 key-cache-size 设置为大于一。此设置可减少为提取下一个键值而调用数据库的次数。


BEA 建议为每种 Bean 类型定义一个 NAMED SEQUENCE 表。如果 Bean 属于不同的类型,则不应共享一个公用 NAMED SEQUENCE 表。这样可减少对键表的争用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值