本地数据库主键生成 – 由数据库生成主键。要启用此功能,请在weblogic-cmp-jar.xml的 <automatic-key-generation> 元素中指定数据库和生成器的名称。容器将基于配置的值生成从数据库获取主键的代码。仅 Oracle 和 Microsoft SQL Server 数据库支持此功能。另外,请参阅声明主键字段类型中的说明。从 SEQUENCE 表生成主键。
无论使用哪种主键生成方法,都请参阅声明主键字段类型中的说明。
为 Oracle 指定自动键生成
Oracle 数据库的生成主键支持使用 Oracle 数据库中的 SEQUENCE 实体来生成唯一的主键。需要新的编号时,将调用 Oracle SEQUENCE。在 weblogic-cmp-jar.xml 的 automatic-key-generation 元素中指定自动键生成。在 generator-name 元素中指定 Oracle SEQUENCE 的名称。如果在创建 Oracle SEQUENCE 时使用了 SEQUENCE INCREMENT,则应指定 key-cache-size。key-cache-size 的值必须与 Oracle SEQUENCE INCREMENT 的值匹配。如果这两个值不同,则可能生成重复键。
对于 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.在此版本中,WebLogic Server 不支持对SEQUENCESchema 对象应用 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>
在 key-cache-size 元素中指定键缓存的大小(容器在一次 DBMS 调用中提取的键数)。BEA 建议将 key-cache-size 设置为大于一。此设置可减少为提取下一个键值而调用数据库的次数。
BEA 建议为每种 Bean 类型定义一个
NAMED SEQUENCE 表。如果 Bean 属于不同的类型,则不应共享一个公用
NAMED SEQUENCE 表。这样可减少对键表的争用。
本文介绍WebLogic Server支持的CMP实体Bean自动主键生成方法,包括本地数据库生成、SEQUENCE表生成及SQLServer IDENTITY列生成等。详细阐述了在不同数据库环境下配置自动键生成的过程。
4633

被折叠的 条评论
为什么被折叠?



