情形:两个表,my_site和my_site_company,通过主键site_id唯一关联。my_site的主键是自动增加,my_site_company的主键依赖于my_site。

#
# Source for table my_site
# DROP TABLE IF EXISTS `my_site`;
CREATE TABLE `my_site` (
`site_id` int(11) NOT NULL AUTO_INCREMENT,
`site_name` varchar(100) DEFAULT NULL COMMENT '站点名称',
`short_name` varchar(100) DEFAULT NULL COMMENT '简短名称',
PRIMARY KEY (`site_id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; #
# Source for table my_site_company
# DROP TABLE IF EXISTS `my_site_company`;
CREATE TABLE `my_site_company` (
`site_id` int(11) NOT NULL DEFAULT '0',
`name` varchar(255) NOT NULL COMMENT '公司名称',
`scale` varchar(255) DEFAULT NULL COMMENT '公司规模',
`industry` varchar(1000) DEFAULT NULL COMMENT '公司行业',
`contact` varchar(500) DEFAULT NULL COMMENT '联系方式',
`address` varchar(500) DEFAULT NULL COMMENT '公司地址',
PRIMARY KEY (`site_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Site.java:

@Entity
@Table(name = "my_site")
@SuppressWarnings("serial")
public class Site implements Serializable
{ // Site的主键是自动递增
@Id
@GeneratedValue
@Column(name = "site_id")
private Integer siteId; @Column(name = "site_name")
private String siteName; @Column(name = "short_name")
private String shortName; // Site通过主键一对一关联到Company,
// 在主键自动递增的对象这边写
@OneToOne(cascade = CascadeType.ALL)
@PrimaryKeyJoinColumn
private Company company;
}

Company.java:

@Entity
@Table(name = "my_site_company")
@SuppressWarnings("serial")
public class Company implements Serializable
{
// Company的主键来源于site的主键
@Id
@Column(name = "site_id")
@GenericGenerator(name = "pkGenerator",
strategy = "foreign" ,
parameters = {@Parameter(name = "property", value = "site")})
@GeneratedValue(generator = "pkGenerator")
private Integer siteId; @Column
private String name; @Column
private String scale; @Column
private String industry; @Column
private String address; @Column
private String contact; @OneToOne(cascade = CascadeType.ALL,
mappedBy = "company")
private Site site;
}

CompanyController.java:

public class CompanyController extends SimpleController
{
@Autowired
SiteDao siteDao; @Autowired
CompanyDao companyDao; @RequestMapping
public String indexAction(Model model,
HttpServletRequest request) throws Exception
{
Site site = siteDao.fetchOne(1);
Company company = site.getCompany();
if (company == null)
company = new Company(); if (request.getMethod() != "POST")
{
model.addAttribute("entity", company);
return redirectDefaultView();
} RequestUtils.copyBeanProperties(company);
company.setSite(site);
site.setCompany(company);
companyDao.update(company); return redirectIndex(SUCCESS_SAVE);
} }

Hibernate注解:一对一主键关联的更多相关文章

  1. Hibernate关联映射1:一对一主键关联

    2张表之间通过主键形成一对一映射关系,如一个人只能有一张身份证: t_identity_card表建表语句: CREATE TABLE `t_identity_card` ( `id` int(11) ...

  2. Hibernate,关系映射的多对一单向关联、多对一双向关联、一对一主键关联、一对一外键关联、多对多关系关联

    2018-11-10  22:27:02开始写 下图内容ORM.Hibernate介绍.hibername.cfg.xml结构: 下图内容hibernate映射文件结构介绍 下图内容hibernate ...

  3. Hibernate5.2之一对一主键关联(四)

                                                      Hibernate5.2之一对一主键关联(四) 一.简介 一对一关联关系分为两种:a.主键关联:b. ...

  4. 010一对一 主键关联映射_双向(one-to-one)

    ²  两个对象之间是一对一的关系,如Person-IdCard(人—身份证号) ²  有两种策略可以实现一对一的关联映射 主键关联:即让两个对象具有相同的主键值,以表明它们之间的一一对应的关系:数据库 ...

  5. 009一对一 主键关联映射_单向(one-to-one)

    009一对一  主键关联映射_单向(one-to-one) ²  两个对象之间是一对一的关系,如Person-IdCard(人—身份证号) ²  有两种策略可以实现一对一的关联映射 主键关联:即让两个 ...

  6. hibernate 注解 联合主键映射

    联合主键用Hibernate注解映射方式主要有三种: 第一.将联合主键的字段单独放在一个类中,该类需要实现java.io.Serializable接口并重写equals和hascode,再将 该类注解 ...

  7. hibernate一对一主键双向关联

    关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...

  8. java:Hibernate框架2(关联映射(多对一,一对多,一对多双向,一对一主键,一对一唯一外键,多对多双向))

      hibernate.cfg.xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE h ...

  9. HIBERNATE一对一双向外键联合主键关联

    HIBERNATE一对一双向外键联合主键关联: 一. 创建主键类:这个主键必须实现serializedable接口和重写其中的hashCode方法和equals方法:为主键类添加一个叫做@Embedd ...

随机推荐

  1. 【转】HTML - embed 与 object 之争

    在 HTML 里嵌入文本和图片之外的事物,就会用到嵌入标签,而嵌入标签在各浏览器之间的不统一,一直是让开发人员很头痛的问题.一切都要从嵌入 SUN 公司的 Applet Java 小程序开始. 当时, ...

  2. js键盘事件全面控制

    js键盘事件全面控制 主要分四个部分第一部分:浏览器的按键事件第二部分:兼容浏览器第三部分:代码实现和优化第四部分:总结 第一部分:浏览器的按键事件 用js实现键盘记录,要关注浏览器的三种按键事件类型 ...

  3. MvcPager2.0 中分页初始化失败的问题

    页面初始化时只有一页数据,或没数据时,出现分页控件初始化失败以及后续Ajax分页功能失效的问题, <div class="pagin"> <div class=& ...

  4. eclipse svn subclipse下载地址

    http://subclipse.tigris.org/servlets/ProjectDocumentList?folderID=2240 Eclipse 3.x Subclipse release ...

  5. Confluence 5.4实现与JIRA前所未有的集成

    http://www.blogjava.net/qileilove/archive/2014/03/03/410520.html 软件开发过程是一个讲求高度协作的过程,它需要很多不同领域团队的共同努力 ...

  6. du 命令,对文件和目录磁盘使用的空间的查看

    Linux du命令也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看,还是和df命令有一些区别的. 1.命令格式: du [选项][文件] 2.命令功能 ...

  7. 用Opera Mobile调试手机版网页【转】

    注意:新版本的opera已经采用webkit内核,没有dragonfly了. 要下载12版的http://get.geo.opera.com/pub/opera/win/1216/int/Opera_ ...

  8. 用Filter解决乱码和jsp缓存问题

    1) 乱码Filter: 新建一个:CharSetFilter package com.my.filter; import java.io.*; import javax.servlet.*; imp ...

  9. 解决RPM包相互依赖的有效方法

    出自:http://blog.csdn.net/kai27ks/article/details/7473683 前言:常用RPM的朋友们都知道,RPM简单易用,但是它的依赖关系是最头疼的!有时候比方说 ...

  10. JavaScript权威指南 第七章 数组

    主要介绍一下数组方法 1.Join() Array.join()方法将数组中所有元素都转换为字符串并连接在一起,返回最后生成的字符串. 可以指定一个可选的字符串在生成的字符串中来分隔数组的各个元素.默 ...