多对多中间表的不使用联合主键,自己持有Id
来源:互联网 发布:巴西人种知乎 编辑:程序博客网 时间:2024/06/03 08:48
问题是这样的 在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中的映射文件可这么写
<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类型生成唯一标示。只有在没有其他进程往同一张表中插入数据时才能使用。在集群下不要使用。
另一种是解决方案是在中间表的实体类里面配置两个多对一,(或者分别在LinkManage,Organ一对多)。
我比较倾向于对二种方案,可能查的时候麻烦点,但是对中间表Status字段利用时会省事很多,并且中间表自己可以持久化,不担心Id的管理问题。
- 多对多中间表的不使用联合主键,自己持有Id
- Hibernate annotation多对多中间表设为新类后id无法成为主键的解决方案
- Hibernate多对多之中间表只有两个外键做联合主键
- hibernate 多对多 中间表主键问题 及id生成方式
- hibernate使用list进行多对多关联时中间表的主键策略
- 联合主键的使用
- JPA联合主键的使用
- Hibernate联合主键的使用
- Hibernate学习--------多个字段联合做主键(Annotation版本的,xml不常用)
- JPA中的多对多和联合主键映射
- hibernate 联合主键 composite-id
- hibernate ID联合生成主键
- hibernate ID联合生成主键
- hibernate 联合主键 composite-id
- hibernate 联合主键 composite-id
- 数据库多个主键(联合主键)
- 联合主键的关系表建立PO使用
- Hibernate的ID生成策略/联合主键解决方案
- 日经社説 20150630 ギリシャを破綻国家にせぬ道を模索せよ
- 很有用的转化
- 软件分发管理器Secure Delivery Center基本概念概述(三)
- window下git的安装了使用
- 进程和线程的区别
- 多对多中间表的不使用联合主键,自己持有Id
- 虚拟内存、物理内存详解(转载)
- 欢迎使用CSDN-markdown编辑器
- Android下拉列表Spinner
- Activity动画切换overridePendingTransition
- sql语句 union mysql
- 使用Homebrew在OS X平台上进行包管理
- Java进阶(极客)——反射机制(三)Method 对象的机制与实现
- Qualcomm 8X camera daemon进程浅析