学习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,是可以的

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值