• 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);
        }
        
    }
  • 相关阅读:
    IOS开发环境
    IOS开发环境搭建
    Eclipse简明使用教程(java集成开发环境)
    分布式相关
    成为架构师之路认识分布式架构
    什么是分布式系统,如何学习分布式系统
    分布式定义
    VIM命令详解
    vim常用命令
    vi/vim 命令使用详解
  • 原文地址:https://www.cnblogs.com/eastson/p/3981670.html
Copyright © 2020-2023  润新知