weblogic-cmp-jar.xml
的 <automatic-key-generation> 元素中指定数据库和生成器的名称。容器将基于配置的值生成从数据库获取主键的代码。仅 Oracle 和 Microsoft SQL Server 数据库支持此功能。另外,请参阅声明主键字段类型中的说明。
无论使用哪种主键生成方法,都请参阅声明主键字段类型中的说明。
为 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
的值匹配。如果这两个值不同,则可能生成重复键。
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.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>
在 key-cache-size
元素中指定键缓存的大小(容器在一次 DBMS 调用中提取的键数)。BEA 建议将 key-cache-size
设置为大于一。此设置可减少为提取下一个键值而调用数据库的次数。
BEA 建议为每种 Bean 类型定义一个
NAMED SEQUENCE
表。如果 Bean 属于不同的类型,则不应共享一个公用
NAMED SEQUENCE
表。这样可减少对键表的争用。