学习hibernate_01_细说onetomany manytoone注解
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,是可以的
版权声明:本文为onezg原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。