双向一对一唯一外键的ddl语句 CREATE TABLE `t_person` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; CREATE TABLE `t_idcard` ( `id` bigint(20) NOT NULL AUTO_INC…
双向一对一共享主键的ddl语句 CREATE TABLE `t_person` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; CREATE TABLE `t_idcard` ( `id` bigint(20) NOT NULL, `cardNo…
双向一对一关联表的ddl语句 CREATE TABLE `t_person` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; CREATE TABLE `t_idcard` ( `id` bigint(20) NOT NULL AUTO_INCR…
²  两个对象之间是一对一的关系,如Person-IdCard(人—身份证号) ²  有两种策略可以实现一对一的关联映射 主键关联:即让两个对象具有相同的主键值,以表明它们之间的一一对应的关系:数据库表不会有额外的字段来维护它们之间的关系,仅通过表的主键来关联. 唯一外键关联:外键关联,本来是用于多对一的配置,但是如果加上唯一的限制之后,也可以用来表示一对一关联关系. 实例场景:人<—-> 身份证号(Person<->IdCard)双向:互相持有对方的引用 对象模型(唯一外键关联映…
²  两个对象之间是一对一的关系,如Person-IdCard(人—身份证号) ²  有两种策略可以实现一对一的关联映射 主键关联:即让两个对象具有相同的主键值,以表明它们之间的一一对应的关系:数据库表不会有额外的字段来维护它们之间的关系,仅通过表的主键来关联. 唯一外键关联:外键关联,本来是用于多对一的配置,但是如果加上唯一的限制之后,也可以用来表示一对一关联关系. 实例场景:人—-> 身份证号(PersonàIdCard),从IdCard看不到Person对象 对象模型实体类与一对一主键关联…
  hibernate.cfg.xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.d…
项目结构: Wife package auth.model; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationTyp…
双向多对多的ddl语句 同单向多对多表的ddl语句一致 Student package com.jege.jpa.many2many; import java.util.HashSet; import java.util.Set; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.ManyTo…
双向一对多的ddl语句 同单向多对一,单向一对多表的ddl语句一致 Product package com.jege.jpa.one2many; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; i…
JPA中的@OneToMany @Target({METHOD, FIELD}) @Retention(RUNTIME) public @interface OneToMany { Class targetEntity() default void.class; CascadeType[] cascade() default {}; FetchType fetch() default EAGER; String mappedBy() default ""; boolean orphan…
联合子类策略 这种情况下子类的字段被映射到各自的表中,这些字段包括父类中的字段,并执行一个join操作来实例化子类. 举例 如果实体类Teacher继承实体类Person,实体类Student也继承自实体Person, 会映射成3个表,子表不包含父表的属性,子表只有子类的属性,子表主键外键关联父表的id 这种策略超类会被映射成一个单独的表,每个子类也会映射成一个单独的表.子类对应的表中只包括自身属性对应的字段,默认情况下使用主键作为超类对应的表的外键. 这种策略对于实体间的多态关系提供了很好的支…
复合主键 指多个主键联合形成一个主键组合 需求产生 比如航线一般是由出发地及目的地确定,如果要确定唯一的航线就可以用出发地和目的地一起来表示 ddl语句 同复合主键-2个@Id和复合主键-2个@Id+@IdClass一样 Airline package com.jege.jpa.embedded; import javax.persistence.EmbeddedId; import javax.persistence.Entity; import javax.persistence.Table…
复合主键 指多个主键联合形成一个主键组合 需求产生 比如航线一般是由出发地及目的地确定,如果要确定唯一的航线就可以用出发地和目的地一起来表示 ddl语句 同复合主键-2个@Id一样 Airline package com.jege.jpa.composite; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence…
JPA中的@ManyToOne 主要属性 - name(必需): 设定"many"方所包含的"one"方所对应的持久化类的属性名 - column(可选): 设定one方的主键,即持久化类的属性对应的表的外键 - class(可选): 设定one方对应的持久化类的名称,即持久化类属性的类型 - not-null(可选): 如果为true,,表示需要建立相互关联的两个表之间的外键约束 - cascade(可选): 级联操作选项,默认为none 单向多对一(@ManyT…
@MapKeyColumn 用@JoinColumn注解和@MapKeyColumn处理一对多关系 ddl语句 CREATE TABLE `t_employee` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; CREATE TABLE `t_e…
PerTable策略 每个具体的类一个表的策略 举例 这种映射策略每个类都会映射成一个单独的表,类的所有属性,包括继承的属性都会映射成表的列. 这种映射策略的缺点是:对多态关系的支持有限,当查询涉及到类继承结构时通常需要发起SQL UNION查询. 配置 注解为:@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) ddl语句 CREATE TABLE `hibernate_sequences` ( `sequence_name` va…
JPA Sun官方提出的Java持久化规范.它为Java开发人员提供了一种对象/关系映射工具来管理Java应用中的关系数据.他的出现主要是为了简化现有的持久化开发工作和整合ORM技术,结束现在Hibernate.TopLink等ORM框架各自为营的局面.值得注意的是,JPA是在充分吸收了现有Hibernate.TopLink等ORM框架的基础上发展而来的,具有易于使用.伸缩性强等优点 简化现有Java EE和Java SE应用的对象持久化的开发工作 Sun希望整合ORM技术,实现一统江湖. JP…
一.一对一单向外键关联: 一对一单向外键关联主要用到了以下两个注解: 1.OneToOne(cascade=CasecadeTYPE.ALL); cascade=CasecadeTYPE.ALL:表示的是表之间的级联关系,比如级联删除,级联更新等,ALL表示的是全级联. 2.JoinColumn(name="sid" unique=true); JoinColumn: 表示将被控类的外键写在主控类中 主要是用到主表中. 需要注意的点是: 在保存时应该先保存外键对象再保存主表对象: 问题…
对象之间的关系 数据库之间的关系只有外键 注意说关系的时候一定要反面也要说通 CRUD 数据库之间设计 主键关联 单向的外键关联 中间表 一对一单向外键关联 Husband.java package com.bjsxt.hibernate; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.J…
双向一对一 一对一主要用在 一个一方需要的信息比较少,比如注册的登录信息 另一个一方存储的信息比较多,比如注册之后用户填写的详细信息 实现方式常用的主要有2种: java模型都是一样,其中一个映射文件有所不同 hibernate.cfg.xml <mapping resource="com/jege/hibernate/two/way/onetoone/User.hbm.xml" /> <mapping resource="com/jege/hibernat…
Spring Data Jpa是基于HIbernate开发的,所以建立实体建的实体和映射关系需要好好好的去了解一下,本文有以下内容,实体管理器介绍,实体与数据库表的映射介绍,关联关系(一对多,多对多)介绍,SpringDataJpa应用分析 ------实体管理器   实体管理器EntityManager是实体与数据库的桥梁(和事务一起发挥作用),相当于Hibenrtae中的session,Mybatis中的sqlSession.使用方法放个小例子吧 @PersistenceContext pr…
网站上各种搜索,都是一些清晰或者不清晰的例子,但是用下来一是确实不给力,二是完全不知道所以然. 后来终于在书中查到了就在这里记一下. 首先要说明,这里只解释双向一对一只有一个表里面有外键的情况. 就以比较普遍的Person和Address为例. 新建表t_person: person_id,person_name. 新建表t_address:address_id,person_id. 新建Person.java类里面有属性:personId, personName, address; 新建Add…
一:一对多 表示一对多的关系时,在子表类中通过 foreign key (外键)引用父表类,然后,在父表类中通过 relationship() 方法来引用子表的类. 在一对多的关系中建立双向的关系,这样的话在对方看来这就是一个多对一的关系,在子表类中附加一个 relationship() 方法,并且在双方的 relationship() 方法中使用 relationship.back_populates 方法参数.这样的话子表将会在多对一的关系中获得父表的属性,或者,可以在单一的 relatio…
JPA中的@ManyToMany @ManyToMany注释表示模型类是多对多关系的一端. @JoinTable 描述了多对多关系的数据表关系. name 属性指定中间表名称 joinColumns 定义中间表与Teacher 表的外键关系 inverseJoinColumns属性定义了中间表与另外一端(Student)的外键关系 单向多对多表的ddl语句 CREATE TABLE `t_student` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `s…
项目结构: Wife package auth.model; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; @Entity @T…
1.Annotation 注解版 1.1.创建Husband类和Wife类 package com.shore.model; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import org.hibernate.annotations.Type; /**…
在执行数据库删除操作时,外键关联是令我们最烦的一个东西,有了外键关联,就不允许随意删除数据,那么怎知道这个外键关联度的外键属于那个表? select * from user_cons_columns cl where cl.constraint_name = '外键名' 这样,我们就可以看到这个外键所关联的表了 还有一种情况是我不知道有哪几个表关联了我的表中的字段,我想全部找出来怎么办? SELECT a.owner,     A.TABLE_NAME      primary_table_na…
复合主键 指多个主键联合形成一个主键组合 需求产生 比如航线一般是由出发地及目的地确定,如果要确定唯一的航线就可以用出发地和目的地一起来表示 ddl语句 CREATE TABLE `t_airline` ( `startCity` varchar(3) NOT NULL, `endCity` varchar(3) NOT NULL, `name` varchar(255) DEFAULT NULL, PRIMARY KEY (`startCity`,`endCity`) ) ENGINE=Inn…
@CollectionTable 指定集合表的详细信息,如果是JPA1.0必须再写一个Pojo类 ddl语句 CREATE TABLE `t_employee` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; CREATE TABLE `t_co…
ddl语句 CREATE TABLE `t_user` ( `id` varchar(32) NOT NULL, `name` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; User package com.jege.jpa.primary; import javax.persistence.Column; import javax.persistence.Entity; i…