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