首页 > 代码库 > Hibernate注解:一对一主键关联

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 = "http://www.mamicode.com/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注解:一对一主键关联