zoukankan      html  css  js  c++  java
  • Hibernate注解:一对多外键关联

    情形:两个表,cms_mode是主表,cms_model_field是子表,cms_model_field的model_id字段关联到cms_model的主键。

    #
    # Source for table cms_model
    #
    
    DROP TABLE IF EXISTS `cms_model`;
    CREATE TABLE `cms_model` (
      `model_id` int(11) NOT NULL,
      `name` varchar(50) NOT NULL DEFAULT '',
      `title` varchar(100) NOT NULL DEFAULT '' COMMENT '名称',
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='CMS模型表';
    
    #
    # Source for table cms_model_field
    #
    
    DROP TABLE IF EXISTS `cms_model_field`;
    CREATE TABLE `cms_model_field` (
      `field_id` int(11) NOT NULL AUTO_INCREMENT,
      `model_id` int(11) NOT NULL DEFAULT '0' COMMENT '模型ID',
      `name` varchar(50) DEFAULT NULL COMMENT '名称',
      `title` varchar(250) NOT NULL DEFAULT '' COMMENT '标题',
      `priority` int(11) NOT NULL DEFAULT '0' COMMENT '权重',
      `data_type` char(1) NOT NULL DEFAULT '1' COMMENT '数据类型(S-字符,N-数值,D-日期,T-备注)',
      `is_reserved` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否保留',
      PRIMARY KEY (`field_id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='CMS模型字段表';;

    CmsModel.java:

    @Entity
    @Table(name = "cms_model")
    @SuppressWarnings("serial")
    public class CmsModel implements Serializable
    { 
        @Id
        @GeneratedValue
        @Column(name = "model_id")
        private Integer id;
        
        @Column(name = "name")
        private String name;
        
        @Column(name = "title")
        private String title;
        
        @OneToMany(mappedBy = "model", 
                fetch = FetchType.LAZY)
        private List<CmsModelField> fieldList;
    }

    CmsModelField.java:

    @Entity
    @Table(name = "cms_model_field")
    @SuppressWarnings("serial")
    public class CmsModelField implements Serializable
    { 
        @Id
        @GeneratedValue
        @Column(name = "field_id")
        private Integer id;
        
        @Column(name = "name")
        private String name;
        
        @Column(name = "title")
        private String title;
        
        @Column(name = "data_type")
        private String dataType;
        
        @Column(name = "priority")
        private Integer priority;
        
        @Column(name = "is_reserved")
        private Boolean reserved;
        
        @ManyToOne(fetch = FetchType.LAZY)
        @JoinColumn(name = "model_id")
        private CmsModel model;
    }

    @OneToMany Default: FetchType.LAZY默认是延迟抓取,不需要左联接。如果是FetchType.EAGER即时抓取,就会是左联接查询。
    @ManyToOne Default: FetchType.EAGER默认是即时抓取,做连接。如果fetch=FetchType.LAZY不是左联接,在需要One的时候直接select。

  • 相关阅读:
    MySQL数据库常见面试题
    抽象类与接口
    HashMap与Hashtable的区别
    IDEA破解
    重写equals方法
    MFC编程入门之十七(对话框:文件对话框)
    MFC编程入门之十六(对话框:消息对话框)
    MFC编程入门之十五(对话框:一般属性页对话框的创建及显示)
    MFC编程入门之十三(对话框:属性页对话框及相关类的介绍)
    MFC编程入门之十二(对话框:非模态对话框的创建及显示)
  • 原文地址:https://www.cnblogs.com/eastson/p/3994157.html
Copyright © 2011-2022 走看看