zoukankan      html  css  js  c++  java
  • 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);
        }
        
    }
  • 相关阅读:
    Revit 二次开发参照属性
    存储过程分页 (多条件拼接)
    Dapper的使用
    C#实现简单的邮件发送
    ORM 简介
    Web Services简介
    事物、锁、存储过程
    游标和触发器简介
    ASP.NET 上传文件方法
    C# Web API 实现上传功能
  • 原文地址:https://www.cnblogs.com/eastson/p/3981670.html
Copyright © 2011-2022 走看看