日期:2014-05-20  浏览次数:20605 次

hibernate多对多,中间表主键问题?
现在有一个问题就是在hibernate多对多中间表,一般都是两个外键,例如
用户表(usertable),主键:userid.
角色表(roletable),主键:roleid.
中间表字段为两个外键:userid,roleid作为联合主键。
但是现在我如果想在中间表加一个字段作为单独的主键,即设置一个字段id作为主键。
那么采用hibernate向中间表插数据的时候,就会出现问题,即主键id字段插入为空,会抱错误。
由于我数据库采用的是oracle数据库,所以主键不能设置为自增。
请教高手帮忙啊!~~~~~~
非常感谢!~~~~~~

------解决方案--------------------
安装有oracle数据库,创建数据库,总是要创建一个主键ID,唯一标示各条记录,但oracle不支持自动编号,所以还得创建一个SEQUENCE(序列)语句如
create sequence bign nocycle maxvalue 9999999999 start with 1;//增加数据

insert into table (ID,..) values(bign.nextval,..)
在hibernate中的映射文件可这么写
<id name="id" type="java.lang.Long" column="ID">
<generator class="sequence" >
<param name="sequence">bign</param>
</generator>
</id>



<id name="id" type="java.lang.Long" column="ID">
<generator class="increment" >
</id>
另外:increment 用与为long,short或者int类型生成唯一标示。只有在没有其他进程忘同一张表中插入数据时才能使用。在集群下不要使用