多对多中间表的不使用联合主键,自己持有Id

        问题是这样的 在ORACLE数据库中存在一个多对多的的关系,即LinkManage(链接表),Organ(机构表),中间建有一个中间表LinkOrgan(链接-机构表),中间表不仅持有多方的ID为外键,并且有自己的Id属性(不是联合主键),还有自己的Status(状态)属性,CreatTime(创建时间),UpdateTime(更新时间)之类的属性。

       单纯的在多对多方建立关系,在保存时会出现ORA-01400: 无法将 NULL 插入 ("WJJK"."T_LINK_ORGAN"."ID"),即增加中间表时主键为null。

      目前解决方案有两种,一种是使用sequence(首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限),然后写触发器。(其他数据库完全可以直接设置为自增长)。

网友的写法是

     create sequence bign nocycle maxvalue 9999999999 start with 1;//增加数据

insert into table (ID,..) values(bign.nextval,..)
     在hibernate中的映射文件可这么写
   
            
                 bign
            
   



  
            
  
另外:increment 用与为long,short或者int类型生成唯一标示。只有在没有其他进程往同一张表中插入数据时才能使用。在集群下不要使用。

另一种是解决方案是在中间表的实体类里面配置两个多对一,(或者分别在LinkManage,Organ一对多)。

我比较倾向于对二种方案,可能查的时候麻烦点,但是对中间表Status字段利用时会省事很多,并且中间表自己可以持久化,不担心Id的管理问题。

你可能感兴趣的:(java语言基础)