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。

时间: 2024-10-18 20:02:13

Hibernate注解:一对多外键关联的相关文章

Hibernate注解:一对一主键关联

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

hibernate5(12)注解映射[4]一对一外键关联

在实际博客站点中,文章内容的数据量非常多,它会影响我们检索文章其他数据的时间,如查询公布时间.标题.类别的等. 这个时候,我们能够尝试将文章内容存在还有一张表中,然后建立起文章--文章内容的一对一映射 一对一关联有两种方式,一种是外键关联.还有一种是复合主键关联. 外键关联 以下我们先看一个一对一单向关联的实例 /*************关联关系维护方************/ @Table(name = "t_article") @Entity public class Artic

hibernate一对一双向外键关联

一对一双向外键关联:双方都持有对方的外键关联关系. 主控方和一对一单向外键关联的情况是一样的,主要的差异表现为,被空方需要添加: @OneToOne(mappedBy="card") //被控方 主控方必须交给其中的一方去控制,因为不可以双方都同时拥有控制对方的权利,假如是这样的话是没有办法保存成功的.这就是为什么需要指定mappenBy="card"的原因. 1.IdCard.java实体类: package oto_bfk; import javax.persi

Hibernate,关系映射的多对一单向关联、多对一双向关联、一对一主键关联、一对一外键关联、多对多关系关联

2018-11-10  22:27:02开始写 下图内容ORM.Hibernate介绍.hibername.cfg.xml结构: 下图内容hibernate映射文件结构介绍 下图内容hibernate映射文件中主键自增规则.Hibernate实例状态(瞬时状态.持久化状态.托管状态).Hibernate初始化类获取session等方法 下图内容保存数据过程 下面内容保存数据顺序.查询数据方法 get().load()和延迟加载.删除数据 下图内容删除对象顺序.修改数据顺序 下面内容关联关系映射.

Hibernate5.2之一对一外键关联(五)

                                                 Hibernate5.2之一对一外键关联(五) 一.简介 上篇文章中笔者介绍了Hibernate关联关系中的一对一外键关联,本篇博客将介绍一对一外键关联.其实我们回过头想一想,外键关联其实就是一对多关联关系中将多的一方简化为一个,就是我们本文所要介绍的一对一的外键关联. 二.外键关联 2.1数据库表的创建 create table people ( id varchar2(255 char) not

外键关联非主键id时-hbm.xml配置,及其分页查询DaoImpl

表关联时,外键关联非主键id时-hbm.xml配置: (由于hibernate默认为关联主键查询,故需要配置相关hql语句的属性) <many-to-one name="areas" class="com.hnqy.entity.Areas" fetch="select" property-ref="areaid" foreign-key="areaid"> <column name=&q

011一对一 唯一外键关联映射_单向(one-to-one)

²  两个对象之间是一对一的关系,如Person-IdCard(人—身份证号) ²  有两种策略可以实现一对一的关联映射 主键关联:即让两个对象具有相同的主键值,以表明它们之间的一一对应的关系:数据库表不会有额外的字段来维护它们之间的关系,仅通过表的主键来关联. 唯一外键关联:外键关联,本来是用于多对一的配置,但是如果加上唯一的限制之后,也可以用来表示一对一关联关系. 实例场景:人—-> 身份证号(PersonàIdCard),从IdCard看不到Person对象 对象模型实体类与一对一主键关联

Hibernate-----一对一唯一外键关联映射(映射文件方式)

唯一外键关联:外键关联,本来是用于多对一的配置,但如果加上唯一的限制后,也可用来表示一对一关联关系:是多对一的特例 一.单向关联映射 One(维护端:Person)['多端'] <?xml version="1.0"encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "htt

012一对一 唯一外键关联映射_双向(one-to-one)

²  两个对象之间是一对一的关系,如Person-IdCard(人—身份证号) ²  有两种策略可以实现一对一的关联映射 主键关联:即让两个对象具有相同的主键值,以表明它们之间的一一对应的关系:数据库表不会有额外的字段来维护它们之间的关系,仅通过表的主键来关联. 唯一外键关联:外键关联,本来是用于多对一的配置,但是如果加上唯一的限制之后,也可以用来表示一对一关联关系. 实例场景:人<—-> 身份证号(Person<->IdCard)双向:互相持有对方的引用 对象模型(唯一外键关联映