Hibernate注解:一对一主键关联

情形:两个表,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);
    }

}
时间: 2024-10-09 19:01:11

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

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

2018-11-10  22:27:02开始写 下图内容ORM.Hibernate介绍.hibername.cfg.xml结构: 下图内容hibernate映射文件结构介绍 下图内容hibernate映射文件中主键自增规则.Hibernate实例状态(瞬时状态.持久化状态.托管状态).Hibernate初始化类获取session等方法 下图内容保存数据过程 下面内容保存数据顺序.查询数据方法 get().load()和延迟加载.删除数据 下图内容删除对象顺序.修改数据顺序 下面内容关联关系映射.

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

                                                  Hibernate5.2之一对一主键关联(四) 一.简介 一对一关联关系分为两种:a.主键关联:b.外键关联.这两种关联关系在日常的开发中都比较的常用,本篇文章介绍主键关联,在下一篇文章中介绍外键关联. 二.主键关联 2.1 数据库的创建 create table cards ( id varchar2(255 char) not null, card_num varchar2(255 char)

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

²  两个对象之间是一对一的关系,如Person-IdCard(人—身份证号) ²  有两种策略可以实现一对一的关联映射 主键关联:即让两个对象具有相同的主键值,以表明它们之间的一一对应的关系:数据库表不会有额外的字段来维护它们之间的关系,仅通过表的主键来关联. 唯一外键关联:外键关联,本来是用于多对一的配置,但是如果加上唯一的限制之后,也可以用来表示一对一关联关系. 实例场景:人<—-> 身份证号(Person<->IdCard)双向:互相持有对方的引用 IdCard实体类: p

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

009一对一  主键关联映射_单向(one-to-one) ²  两个对象之间是一对一的关系,如Person-IdCard(人—身份证号) ²  有两种策略可以实现一对一的关联映射 主键关联:即让两个对象具有相同的主键值,以表明它们之间的一一对应的关系:数据库表不会有额外的字段来维护它们之间的关系,仅通过表的主键来关联. 唯一外键关联:外键关联,本来是用于多对一的配置,但是如果加上唯一的限制之后,也可以用来表示一对一关联关系. 实例场景:人—-> 身份证号(PersonàIdCard),从IdC

hibernate 注解 联合主键映射

联合主键用Hibernate注解映射方式主要有三种: 第一.将联合主键的字段单独放在一个类中,该类需要实现java.io.Serializable接口并重写equals和hascode,再将 该类注解为@Embeddable,最后在主类中(该类不包含联合主键类中的字段)保存该联合主键类的一个引用,并生成set和get方法,并将该引用注 解为@Id 第二.将联合主键的字段单独放在一个类中,该类需要实现java.io.Serializable接口并重写equals和hascode,最后 在主类中(该

hibernate关联映射【一对一主键】

从三个部分介绍Hibernate一对一主键关联映射. 1.基本介绍2.代码展示3.总结注意  1.基本介绍 一对一关联有两种情况: 单向一对一主键关联.双向一对一主键关联.一对一主键关联: 是指两个表之间通过主键形成一对一的映射,例如,每个公民只允许拥有一个身份证,公民与身份证就是一对一的关系,定义两张表,一张People表,一张IdCard表,People表的id既是该表的主键也是该表的外键,并且People的id也就是IdCard的id, 2.代码 单向一对一主键关联:people表的id既

Hibernate _one to one 主键关联 XML配置

人 与身份证 一对一 主键关联: 1 package com.helen.model; 2 3 public class People1 { 4 private int id; 5 private String name; 6 private int age; 7 private IDcard1 idcard; 8 9 10 public int getId() { 11 return id; 12 } 13 14 public void setId(int id) { 15 this.id =

数据库一对一的两种关联 主键关联和外键关联

关联映射:一对一 一对一关系就如球队与球队所在地址之间的关系,一支球队仅有一个地址,而一个地址区也仅有一支球队. 数据表间一对一关系的表现有两种,一种是外键关联,一种是主键关联.图示如下: 一对一外键关联: 一对一主键关联:要求两个表的主键必须完全一致,通过两个表的主键建立关联关系 出自:http://hi.baidu.com/websatyr/item/10e3d83766ffb3f42784f481

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

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