我对 NHibernate 很陌生,并且正在尝试通过 ISeries 提供程序连接到 DB2 表。该表有一个作为身份自动生成的 BIGINT 主键。我在映射文件中为 id 的生成器属性尝试了几个值,但都没有成功。表 def 如下所示(字段名称已更改):
CREATE TABLE SCHEMA/TABLE (
PKID BIGINT GENERATED ALWAYS AS IDENTITY (
START WITH 1 INCREMENT BY 1
NO MINVALUE NO MAXVALUE
NO CYCLE NO ORDER
CACHE 20)
,
SOMESTRING VARCHAR(50) CCSID 37 DEFAULT NULL,
FIRSTFK BIGINT NOT NULL,
SECONDFK BIGINT DEFAULT NULL,
ANOTHERSTRING VARCHAR(100) CCSID 37 DEFAULT NULL,
CONSTRAINT NISDEV/PK_TABLE PRIMARY KEY (PKID));
映射文件如下所示:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="Project.Domain.Thing, Project" table="TABLE">
<id name="ID" column="PKID" type="Int64">
<generator class="**???????**" />
</id>
<property name="SomeString" column="SOMESTRING" />
<property name="FirstFK" column="FIRSTFK"/>
<property name="SecondFK" column="SECONDFK"/>
<property name="AnotherString" column="ANOTHERSTRING"/>
</class>
</hibernate-mapping>
起初,我将生成器类设置为“native”,根据文档,它为 DB2 选择“identity”。使用“本机”或“身份”,当我将生成器类更改为各种其他值时,我得到“PKID 列中不允许空值”以及各种其他错误。
我确定文档中缺少一些小东西,但是有什么方法可以让 NHibernate 获取主键的下一个值,它是 DB2 中的 GENERATED IDENTITY 并在我调用时为我处理它节省()?我是否需要在 NHibernate 可以用来获取下一个值的地方写一个选择?
提前致谢。