JPA 系列教程7-双向多对多】的更多相关文章

双向多对多的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…
JPA中的@ManyToOne 主要属性 - name(必需): 设定"many"方所包含的"one"方所对应的持久化类的属性名 - column(可选): 设定one方的主键,即持久化类的属性对应的表的外键 - class(可选): 设定one方对应的持久化类的名称,即持久化类属性的类型 - not-null(可选): 如果为true,,表示需要建立相互关联的两个表之间的外键约束 - cascade(可选): 级联操作选项,默认为none 单向多对一(@ManyT…
JPA中的@ManyToMany @ManyToMany注释表示模型类是多对多关系的一端. @JoinTable 描述了多对多关系的数据表关系. name 属性指定中间表名称 joinColumns 定义中间表与Teacher 表的外键关系 inverseJoinColumns属性定义了中间表与另外一端(Student)的外键关系 单向多对多表的ddl语句 CREATE TABLE `t_student` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `s…
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…
双向一对多的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…
双向一对一关联表的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…
双向一对一唯一外键的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…
@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…
联合子类策略 这种情况下子类的字段被映射到各自的表中,这些字段包括父类中的字段,并执行一个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 Sun官方提出的Java持久化规范.它为Java开发人员提供了一种对象/关系映射工具来管理Java应用中的关系数据.他的出现主要是为了简化现有的持久化开发工作和整合ORM技术,结束现在Hibernate.TopLink等ORM框架各自为营的局面.值得注意的是,JPA是在充分吸收了现有Hibernate.TopLink等ORM框架的基础上发展而来的,具有易于使用.伸缩性强等优点 简化现有Java EE和Java SE应用的对象持久化的开发工作 Sun希望整合ORM技术,实现一统江湖. JP…
双向多对多inverse配置 如果关系两边都使用默认inverse=false配置,表示关系两边都可以管理中间表的数据 关系其中一边设置inverse=true配置,表示自己放弃管理中间表关系,由对方来管理 如果关系两边都使用默认inverse=true配置,表示关系两边都不管理中间表,是不能这样配置的 hibernate.cfg.xml <mapping resource="com/jege/hibernate/two/way/manytomany/User.hbm.xml"…
主要讲解inverse和cascade的用法 cascade定义的是关系两端对象到对象的级联关系: 而inverse定义的是关系和对象的级联关系(管理外键的值). inverse 属性默认是false的,就是说关系的两端都来维护关系. 在双向多对一里面配置到一方的集合属性上面,inverse=true,表示关系的维护(外键的值)由对方(多方)来管理 cascade all : 所有情况下均进行关联操作. none:所有情况下均不进行关联操作.这是默认值. save-update:在执行save/…
Spring Data Jpa是基于HIbernate开发的,所以建立实体建的实体和映射关系需要好好好的去了解一下,本文有以下内容,实体管理器介绍,实体与数据库表的映射介绍,关联关系(一对多,多对多)介绍,SpringDataJpa应用分析 ------实体管理器   实体管理器EntityManager是实体与数据库的桥梁(和事务一起发挥作用),相当于Hibenrtae中的session,Mybatis中的sqlSession.使用方法放个小例子吧 @PersistenceContext pr…
双向一对一共享主键的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…
@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…
需求 设计的国际化网站,页面需要输入firstName,lastName,后台数据库只需要存储name属性. 页面获取的firstName,lastName持久化到数据库name属性,规则按照,分隔保存. 防止错误修改,模型里面的name属性不提供getter,setter方法. ddl语句 CREATE TABLE `t_user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `birthday` datetime DEFAULT NULL, `nam…
继承映射策略 一个类继承结构一个表的策略,最终只生成一个表,这是继承映射的默认策略. 举例 如果实体类Teacher继承实体类Person,实体类Student也继承自实体Person,那么只会映射成一个表,这个表中包括了实体类Person.Teacher.Student中所有的字段 这种策略中,一个继承结构中的所有类都被映射到一个表中.该表中有一列被当作"discriminator列",即使用该列来识别某行数据属于某个指定的子类实例. 这种映射策略对实体和涉及类继承结构的查询的多态系…
自定义类型 在hibernate中实现自定义类型,需要去实现UserType接口即可或者以Component的形式提供. JPA的@Embedded注解有点类似,通过此注解可以在Entity模型中使用一般的java对象,不过此对象还需要用@Embeddable注解标注. 需求产生 Employee类有一个address属性, address应该有city,street两个属性, 一般的写法直接在Employee类中写两个属性: private String city; private Strin…
复合主键 指多个主键联合形成一个主键组合 需求产生 比如航线一般是由出发地及目的地确定,如果要确定唯一的航线就可以用出发地和目的地一起来表示 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…
JPA JPA全称Java Persistence API. JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中. Hibernate3.2+.TopLink(EclipseLink)以及OpenJPA都提供了JPA的实现. 搭建JPA开发环境 JPA依赖的jar文件.数据库驱动文件 配置文件:META-INF\persistence.xml 领域对象,POJO EntityManagerFactory 异常 javax.persistence.…
项目图片 hibernate.cfg.xml <mapping resource="com/jege/hibernate/one/way/manytoone/User.hbm.xml" /> <mapping resource="com/jege/hibernate/one/way/manytoone/Dept.hbm.xml" /> 映射文件 User.hbm.xml <?xml version="1.0"?>…
异常1.hibernate升级到3.5版本 异常信息摘要: Associations marked as mappedBy must not define database mappings like @JoinTable or @JoinColumn 异常信息说明:@JoinColumn与mappingBy只能存在一个 hibernate升级到3.5版本或者更新的版本时出现这样的异常 在3.5版本之后@JoinColumn与mappingBy是互斥的,而在更早版本的hibernate是允许这两…
JPA(Java Persistence API)Java持久化API,是 Java 持久化的标准规范,Hibernate是持久化规范的技术实现,而Spring Data JPA是在 Hibernate 基础上封装的一款框架.JPA作为标准,实际上并没有说局限于某个固定的数据源,事实上mysql,mongo, solr都是ok的.接下来我们将介绍下springboot结合jpa 来实现mysql的curd以及更加复杂一点的sql支持 jpa系列教程将包含以下几块 环境搭建 基础的插入.修改.删除…
场景 JPA入门简介与搭建HelloWorld(附代码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103473937 JPA中实现单向多对一的关联关系: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103511623 JPA中实现单向一对多的关联关系: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/arti…
该系列教程系个人原创,并完整发布在个人官网刘江的博客和教程 所有转载本文者,需在顶部显著位置注明原作者及www.liujiangblog.com官网地址. Python及Django学习QQ群:453131687 我们都知道对于ManyToMany字段,Django采用的是第三张中间表的方式.通过这第三张表,来关联ManyToMany的双方.下面我们根据一个具体的例子,详细解说中间表的使用. 一.默认中间表 首先,模型是这样的: class Person(models.Model): name…
映射双向多对一的关联关系 修改Customer.java package com.dx.jpa.singlemanytoone; import java.util.Date; import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import jav…