【SSH进阶之路】【十二】hibernate5 注解映射【5】一对一共享主键关联
来源:互联网 发布:网络用语orz是什么意思 编辑:程序博客网 时间:2024/06/12 00:47
一对一共享主键
下面我们直接通过实例来讲解共享主键配置:
主键主控方:Article
package com.chenhao.model;@Table(name = "t_article2")@Entitypublic class Article { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Integer id; private String title; @OneToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY,optional = false) @PrimaryKeyJoinColumn//配置共享主键,否则会额外生成外键关联列 private ArticleContent articleContent; //忽略get 和set方法}
引用主键方:ArticleContent。这是共享主键关联的关键配置地方所在类
package com.chenhao.model;@Table(name = "t_article_content")@Entitypublic class ArticleContent { @Id @GenericGenerator(name = "foreignKey" ,//生成器名称 strategy = "foreign",//使用hibernate的外键策略 parameters = @Parameter(value = "article",name = "property"))//指定成员属性中的article所在类的主键为本类的主键,这里的参数属性name必须为"property" @GeneratedValue(generator = "foreignKey")//使用上述定义的id生成器 private Integer id; @Lob private String content; //如果试图不加此注解来形成单向关联,会抛出异常, //因为设置了共享主键这里是否配置mapperBy放弃维护关联关系已失去作用。 @OneToOne(cascade = CascadeType.ALL) @PrimaryKeyJoinColumn//如果不加此注解,hibernate会在数据库默认生成一条article_id属性 private Article article; //忽略get 和set方法
下面是我们的测试方法:
Article article = new Article();article.setTitle("title");ArticleContent articleContent = new ArticleContent();articleContent.setContent("content");article.setArticleContent(articleContent);articleContent.setArticle(article);//必须双方设置session.save(article);
下面是几点需要注意的:
1.在设置属性ID的时候必须注意字段的长度,如笔者这样使用Oracle的sequence来生成ID,其长度有14位之长,则应选择hibernate类型long,对应的实体中应选择Long,这样不会出现溢出的情况。2.在测试的时候必须要注意这两张表之间因为已经存在了一对一的关系,所以我们不能只写articleContent.setArticle(article);而忽略了articleContent.setArticle(article);这样在做插入的时候会报出attempted to assign id from null one-to-one property: address的错误.3.如果不写cascade=”all”或者写成cascade=”none”的话,即使写了article.setArticleContent(articleContent);和articleContent.setArticle(article);也不会发生任何事情,只有user会被存储。4.one-to-one的效率问题——-one-to-one在查询时,总是查出和主表关联的表,而且one-to-one的lazy属性只有false proxy no-proxy三种,没有true。outer-join=”false”也只是徒增查询语句条数,把本来的一条sql语句变成多条。所以在one-to-one这种一对一的关系不是很强的情况下(one-to-one关系强即总是查出这所有的几个关联表),或者是在一张表中存在多个one-to-one的情况下,使用最好one-to-many来代替one-to-one。
0 0
- 【SSH进阶之路】【十二】hibernate5 注解映射【5】一对一共享主键关联
- 【SSH进阶之路】【十二】hibernate5 注解映射【4】一对一外键关联
- hibernate5(13)注解映射[5]一对一共享主键关联
- 【SSH进阶之路】【五】hibernate5 实体映射注解配置 【2】主键生成策略
- 【SSH进阶之路】【九】hibernate5 注解映射【1】 多对一单向关联
- 【SSH进阶之路】【十】hibernate5 注解映射【2】 一对多单向关联
- 【SSH进阶之路】【十一】hibernate5 注解映射【3】一对多多对一双向关联
- 【SSH进阶之路】【四】hibernate5 实体映射注解配置 【1】注解全面解析
- 【SSH进阶之路】Hibernate映射——一对一单向关联映射(五)
- 【SSH进阶之路】Hibernate映射——一对一双向关联映射(六)
- 【SSH进阶之路】Hibernate映射——一对一单向关联映射(五)
- 【SSH进阶之路】Hibernate映射——一对一双向关联映射(六)
- 【SSH进阶之路】Hibernate映射——一对一双向关联映射(六)
- 【SSH进阶之路】Hibernate映射——一对一单向关联映射(五)
- 【SSH进阶之路】Hibernate映射——一对一单向关联映射(五)
- 【SSH进阶之路】Hibernate映射——一对一单向关联映射(五)
- 【SSH进阶之路】Hibernate映射——一对一双向关联映射(六)
- Hibernate一对一关联(共享主键) 注解 || xml
- Linux文件管理
- sphinx增量索引和主索引来实现索引的实时更新
- 新年抓包大礼包
- java 有前后台 springmvc SSM 生成静态化 企业网站源码模版
- Java 可变 数组 可变 参数 实例
- 【SSH进阶之路】【十二】hibernate5 注解映射【5】一对一共享主键关联
- 什么是透传技术
- 神经网络和深度学习简史(三)
- activiti工作流的web流程设计器整合视频教程 SSM和独立部署
- net/c# 微信企业号 userid转换成openid接口
- CentOS7.0源代码安装GTK+3.22.7
- Oracle trunc()函数的用法
- .NET框架- in ,out, ref , paras的使用总结
- 卷积算法