您的位置:首页 > 移动开发

学习hibernate_01_细说onetomany manytoone注解

2017-01-23 23:52 357 查看
onetomany,一对多,用一的一方维护多的一方;manytoone,多对一,用多的一方维护多的一方。

采用MySql数据库,用字典类型和数据字典做为示例。

1. 数据库表

CREATE TABLE `sys_dictionary_type` (
`ID` int(11) NOT NULL AUTO_INCREMENT COMMENT '类型标识',
`NAME` varchar(100) CHARACTER SET utf8 NOT NULL COMMENT '类型名称',
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;

INSERT INTO `sys_dictionary_type` VALUES ('1', '编码类型');
INSERT INTO `sys_dictionary_type` VALUES ('2', '联系方式');

=====================================================================

CREATE TABLE `sys_dictionary` (
`ID` int(11) NOT NULL AUTO_INCREMENT COMMENT '字典标识',
`NAME` varchar(100) CHARACTER SET utf8 NOT NULL COMMENT '字典名称',
`TYPEID` int(11) NOT NULL COMMENT '字典类型ID',
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;

INSERT INTO `sys_dictionary` VALUES ('1', 'UTF8', '1');
INSERT INTO `sys_dictionary` VALUES ('2', 'GBK', '1');
INSERT INTO `sys_dictionary` VALUES ('3', 'big5', '1');
INSERT INTO `sys_dictionary` VALUES ('4', '手机', '2');
INSERT INTO `sys_dictionary` VALUES ('5', 'QQ', '2');


Navicat表设计截图





2. JavaBean

import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@Table(name = "SYS_DICTIONARY_TYPE")
public class DicTypeDomain implements java.io.Serializable  {

private static final long serialVersionUID = -4695667192670895776L;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID", unique = true, nullable = false)
private Integer id;

@Column(name = "NAME")
private String name;

//dictype是什么?就是另一方,manytoone所在的参数是哪个就写成那个。
@OneToMany(mappedBy = "dictype")
private Set<DicDomain> dics;

//省略getters and setters
}


import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Table(name = "SYS_DICTIONARY")
public class DicDomain {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID", unique = true, nullable = false)
private Integer id;

@Column(name = "NAME")
private String name;

@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "typeid", updatable = false, insertable = false)
private DicTypeDomain dictype;

//省略getters and setters
}


注意点:

(1)one表只需设置主键

(2)many表需要定义一个关联one表的字段,字段类型两者要一致

(3)@ManyToOne使用JoinColumn,设置成many表的关联字段

(4)@OneToMany的mappedBy,设置成另一方manytoone所在的参数

(5)只有@ManyToOne没有@OneToMany,是可以的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息