摘要: 使用@OneToOne @JoinColumns( { @JoinColumn(name="wifeId",referencedColumnName="id"), @JoinColumn(name="wifeName",referencedColumnName="name"), } ) 阅读全文
posted @ 2013-12-09 16:10 李鬼989 阅读(216) 评论(0) 推荐(0) 编辑
摘要: 在数据库里面单向和双向其实没区别,它的区别主要在于java程序里面,如果是双向的,通过wife也能找到husband,如果是单向的,通过wife找不到husband。主键关联在annotation里面是用@PrimaryKeyJoinColumn,但是做实验并没有发现主键有做关联,所以hibernate的这个有bug,主键关联不重要。用xml设置, student 先插student,student有了id再插stuIdCard。在项目中,一对一很少,一... 阅读全文
posted @ 2013-12-09 15:38 李鬼989 阅读(310) 评论(0) 推荐(0) 编辑
摘要: 首先在程序里面写成双向的,husband里面有wife的引用,wife里面也有husband的引用。package hjj.lch.hibernate.model;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.OneToOne;@Entitypublic class Wife { private int id; private String name; private Husband husb 阅读全文
posted @ 2013-12-09 14:40 李鬼989 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 新建两个类,Husband.java和Wife.java两个类的id号是一一对应的,用面向对象的方式是加引用,单向关联就是只在其中一个加引用,在数据库中怎么设计呢?第一种是在husband里面加一个外键,在生成husband的时候,必须去wife里面找一下这个id有没有,这叫主键关联,这样就保证的一对一的关系了。第二种,再加一个字段如wife_id,称为外键关联。以wife为主导,必须wife先有了id,wifeid才能有值。第三种,使用中间表,关联表。里面写husband_id,wife_id。husband.javapackage hjj.lch.hibernate.model;impor 阅读全文
posted @ 2013-12-09 13:05 李鬼989 阅读(312) 评论(0) 推荐(0) 编辑
摘要: 1.这里的关系映射指的是对象之间的关系,并不是指数据库的关系,当对象之间处于下列关系之一时,数据库表该如何映射,变成上该如何对待,红色是重点2.简化问题a) 怎么写Annotationb) 增删改查CRUD怎么写3.一对一a) 单向(主键、外键)b) 双向(主键、外键)4.一对多(一个组有多个用户,而每个用户只能属于一个组,这就叫一对多)a) 单向b) 双向5.多对一a) 单向b) 双向6.多对多a) 单向b) 双向7.集合映射a) Listb) Setc) Map8.继承关系(不重要)a) 单表b) 夺标c) 一张主表,多张字表9.组件映射a) @Embeddable 阅读全文
posted @ 2013-12-09 11:17 李鬼989 阅读(204) 评论(0) 推荐(0) 编辑
摘要: 无论load还是get,都会首先查找缓存(一级缓存),如果没有,才会去数据库查找,调用clear()方法可以强制清除session缓存flush()强制让缓存的内容与数据库的内容做同步SchemaExport:在程序里面控制生成建表语句。实际工作中可以不用hbm2ddl.auto这个配置,手动建表 @Test public void testSchemaExport(){ new SchemaExport(new AnnotationConfiguration().configure()).create(true, true);; }第一个true表示是否打印出... 阅读全文
posted @ 2013-12-09 09:23 李鬼989 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 讲update不是讲这个方法,而是讲什么时候会更新数据库里面的内容。什么情况下用更新?1.可以更新一个detachd状态对象,把它变成persistent,同时数据库里进行更新2.更新transient状态的对象会报错,但是更新自己设定好的ID的transient对象可以(前提是数据库里有对应的这条数据记录)有一个问题,它会将所有字段都进行更新,效率不高。是否可以做到只更新改过的字段呢?有三种方法1.修改注解,在model里面加@Column( updatable=false)。这种方式不好,因为它不灵活2.在xml配置文件上写一个dynamic-update="true" 阅读全文
posted @ 2013-12-09 08:59 李鬼989 阅读(238) 评论(0) 推荐(0) 编辑
摘要: 在测update方法之前,我们看读取:get和load。load就是从数据库里取一条记录,取到内存里,把一条记录转化成对应的对象。测试代码:package hjj.lch.hibernate.model;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.AnnotationConfiguration;import org.junit.AfterClass;import org.junit.BeforeClass;import org.junit.Test;publi 阅读全文
posted @ 2013-12-09 08:55 李鬼989 阅读(171) 评论(0) 推荐(0) 编辑