-
一对多的表
查看全部 -
一、在MyEclipse中添加数据库连接 1.打开数据库视图 Open Perspective-->MyEclipse Database Explorer 或Window-->Show View-->Other-->MyEclipse Database-->DB Browser 2.New Database Connection Driver 二、实现为项目添加Hibernate支持 右击项目-->MyEclipse-->Add Hibernaet Capabilities-->选择hibernate版本(越高越好)-->...-->选择数据库连接-->... 三、使用MyEclipse反向工程生成映射关系 1.在MyEclipse中添加数据库连接 2.添加Hibernate支持,生成配置文件 3.反向生成映射:在DB Browser里选中表->Hibernate Reverse Engineering:填写Java src folder, Java package;勾选Create POJO;勾选Create Data Object,记得去掉Create abstract class;->指定Id Generator->选中表,勾选Include referenced talbes(A->B)和Include referenced talbes(A<-B)
查看全部 -
使用MyEclipse反向工程生成映射关系 1.在MyEclipse中添加数据库连接 2.添加Hibernate支持,生成配置文件 3.反向生成映射:在DB Browser里选中表->Hibernate Reverse Engineering:填写Java src folder, Java package;勾选Create POJO;勾选Create Data Object,记得去掉Create abstract class;->指定Id Generator->选中表,勾选Include referenced talbes(A->B)和Include referenced talbes(A<-B)
查看全部 -
3、实现为项目添加Hibernate支持 右击项目-->MyEclipse-->Add Hibernaet Capabilities-->选择hibernate版本(越高越好)-->...-->选择数据库连接-->.. 它能生成XXX.cfg.xml 文件还能生成HibernateSessionFactory工具类简化我们的操作
查看全部 -
实现单向一对多: 在one方的实体中添加保存many方的集合 在one放的配置文件中添加<one-to-many>配置 实现单向多对一: 在many方的实体中添加one方的引用 在many方的配置文件中添加<many-to-one>配置 常用属性: cascade:设置级联关系 inverse:设置由哪一方维护关联关系
查看全部 -
inverse和cascade属性 一、inverse属性 1、一方的hbm.xml文件的<set>节点的inverse属性指定了关联关系的控制方向,默认由one方来维护; 2、关联关系中,inverse="false"则为主动方,由主动方负责维护关联关系; 3、在一对多关联中,设置one方的inverse为true,这将有助于性能的改善。 二、级联(cascade)属性 配置映射文件: //grade映射文件 <!-- 配置单向一对多关系;设置inverse为true,有多方进行关联关系的维护; 当保存和更新时自动进行级联操作--> <set name="stu" table="stu" inverse="true" cascade="save-update"> <!-- 指定关联的外键列 --> <key column="gid"></key> <one-to-many class="com.entity.Student"/> </set> //student映射文件 <many-to-one name="grade" class="com.entity.Grade" column="gid" cascade="all"></many-to-one> 三、测试---信息查询 public static void findGradeByStudent(){ Session session=HibernateUtil.getSession(); Student s1=(Student)session.get(Student.class, 2); System.out.println(s1.getSid()+","+s1.getSname()+","+s1.getSex()); Grade g=s1.getGrade(); System.out.println(g.getGid()+","+g.getGname()+","+g.getGdesc()); HibernateUtil.closeSession(session); }
查看全部 -
cascade属性 当设置了cascade属性不为none时,Hibernate会自动持久化所关联的对象. cascade属性的设置会带来性能上的变动,需谨慎设置. 在<set>标签与<many-to-one>标签中都有cascade属性. 如果在<set>设置了cascade="save-update":则当"一方"的对象通过session.save()方法保存在数据库中时,会自动进行级联操作,即保存"一方"的对象进数据库时也会把在"一方"对象中的Set集合中的"多方"对象保存进数据库.因此就可以省写session.save("多方的对象"). 也可以在<many-to-one>中添加cascade="save-update"属性,即当保存"多方"的对象进数据库时,如果数据库不存在此"多方"对象中的"一方"对象,那么会进行级联操作,会把此"一方"对象添加到数据库中. cascade可取: all:所有情况下均进行关联操作,即save-update和delete. none:所有情况下均不进行关联操作,这是默认值. save-update:在执行save/update/saveOrUpdate时进行关联操作. delete:在执行delete 时进行关联操作. all-delete-orphan:当一个节点在对象图中成为孤儿节点时,删除该节点.
查看全部 -
对于inverse属性的说明; 1、一方的hbm.xml文件的<set>节点的inverse属性指定了关联关系的控制方向,默认由one方来维护; 2、关联关系中,inverse="false"则为主动方,由主动方负责维护关联关系; 3、在一对多关联中,设置one方的inverse为true,这将有助于性能的改善。 <!-- 配置单向一对多关系,设置inverse为true,有多方进行关联关系的维护 --> <set name="stu" table="stu" inverse="true"> <!-- 指定关联的外键列 --> <key column="gid"></key> <one-to-many class="com.entity.Student"/> </set>
查看全部 -
<!-- 配置单向的一对多关联关系(班级->学生) --> <set name="students" table="student"> <!-- 指定关联的外键列 --> <key column="gid"></key> <one-to-many class="com.imooc.entity.Student" /> </set> <!-- 配置单向的多对一关联关系(学生->班级) --> <many-to-one name="grade" class="com.imooc.entity.Grade" column="gid"></many-to-one>
查看全部 -
配置双向的关联关系: 1、分别在持久化类中定义另一方的引用; 一方:private Set<Student>students=new HashSet<Student>();并setter、getter 多方:private Grade grade;并setter、getter; 2、在一方映射文件配置一对多属性集合与在多方配置多对一关联关系 //在一方配置关联关系 <set name="一方实体类定义的多方的引用,即多方属性Students" table="多方的表名"> <key column="关联外键的列gid"></key> <one-to-many class="多方实体类的全类名com.imooc.entity.Student" ></one> </set> //在多方配置关联关系 <many-to-one name="指定对应的属性的名称" class="对应实体类的全类名com.imooc.entity.Grade" column="指定外键的列名gid" > </many-to-one> //测试方法 public static void save(){ Grade g=new Grade("Java一班", "Java软件开发一班"); Student s1=new Student("小米", "女"); Student s2=new Student("小明","男"); //创建多对一的配置 g.getStu().add(s1); g.getStu().add(s2); s1.setGrade(g); s2.setGrade(g); Session session=HibernateUtil.getSession(); Transaction transaction=session.beginTransaction(); session.save(g); session.save(s1); session.save(s2); transaction.commit(); HibernateUtil.closeSession(session); }
查看全部 -
单向多对一关系: 测试代码。 *在一对多关系中,在一方建立多方的集合。然后将多方添加进集合,进行保存。 *在多对一关系中,在多方建立一方的引用。然后对一方的引用赋值,进行保存。 //单向多对一之添加学生信息 public static void save(){ Grade g=new Grade("Java一班", "Java软件开发一班"); Student s1=new Student("小米", "女"); Student s2=new Student("小明","男"); //创建多对一的配置 s1.setGrade(g); s2.setGrade(g); Session session=HibernateUtil.getSession(); Transaction transaction=session.beginTransaction(); session.save(g); session.save(s1); session.save(s2); transaction.commit(); HibernateUtil.closeSession(session); }
查看全部 -
单向多对一的配置: 1.在多方持久类定义一方的引用 private Grade grade;并getter,setter 2.在多方的映射文件中添加 <many-to-one name="指定对一方的引用,即一方引用所定义的属性grade" class="一方对应的持久化类,即关联实体类com.imooc.entity.Grade" cloumn="外键的列名gid" ></many-to-one>
查看全部 -
一对多映射 一、简介 什么是一对多的关系呢? 如同班级与学生的关系,站在班级的角度看,班级为一方,学生为多方,这种关系是单向的。 如何实现一对多的关系呢? 1.在数据库中,可以通过添加主外键的关联,表现一对多的关系; 2.在java中,通过在一方持有多方的集合实现,即在“一”的一端中使用<set>元素表示持有“多”的一端的对象。 二、实例 (1)创建HibernateUtil工具类 1.hibernate初始化 2.获取sessionFactory和session对象 3.关闭session对象 (2)在MySQL中创建表 1.创建班级表 2.创建学生表 (3)创建持久化类和映射文件并配置单向一对多关系 a.持久化类 1.创建学生持久化类 2.创建班级持久化类(在一方定义一个多方集合) b.配置映射文件 1.班级映射文件(配置单向一对多关系) 2.学生映射文件 3.hibernate.cfg.xml中指定映射文件、 (4)测试 1.添加和查询学生信息 2.修改和删除学生信息
查看全部 -
在数据库中创建表: create table grade( gid int primary key, gname varchar(20) not null, gdesc varchar(50) ); create table student( sid int primary key, sname varchar(20) not null, sex varchar(2), gid int ); alter table student add constraint fk_student_gid foreign key (gid) references grade(gid);
查看全部 -
Myeclipse配置hibernate步骤:(推荐手动配置) 1.java project -> -> myeclipse -> add hibernate capabilities ->.... 2.手动添加hibernate的jar包,新建lib目录,复制jar包入内;再进行Hibernate.cfg.xml配置 所有 XML 文档中的文本均会被解析器解析。只有 CDATA 区段(CDATA section)中的文本会被解析器忽略。 CDATA全称为character data(字符数据),在编写xml文档时,时常需要显示字母,数字和其他的符号本身,比如 "<""&",而在xml中,这些字符已经有特殊的含义,这就需要用到CDATA语法,语法格式如下: <![CDATA[这里放置需要显示的字符]]> 数据库连接URL,使用CDATA包含是为了不让解析CDATA内部的特殊符号 如"&",如果不用CDATA则用"&"来代替"&"
查看全部
举报