您的位置:首页 > 编程语言 > Java开发

hibernate笔记

2016-06-18 20:26 519 查看


Hibernate在建立sessionFactory时使用单例模式:





马士兵的hibernate课堂笔记:



























对象的三种状态:

















一对一主键关联:





一对一外键关联:











多对一的实体类:(user-group)(多---1)

package cn.ljj.model;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.Id;

import javax.persistence.ManyToOne;

import javax.persistence.Table;

@Entity

@Table(name="t_user")

public class User {

private int id;

private String name;

private Group group;

@Id

@GeneratedValue

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

@ManyToOne

public Group getGroup() {

return group;

}

public void setGroup(Group group) {

this.group = group;

}

}

package cn.ljj.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="t_group")
public class Group {
private int id;
private String name;

@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

一对多的实体类:(group---user)

package cn.ljj.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Table(name="t_user")
public class User {
private int id;
private String name;

@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

package cn.ljj.model;

import java.util.Set;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@Table(name="t_group")
public class Group {
private int id;
private String name;
private Set<User> user;

@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@OneToMany 
//加上下面注释,一对多关系的两个实体类依然会生成两张数据库表,
//并将groupId作为多方(user)表中的一个映射字段
@JoinColumn(name="groupId") 
public Set<User> getUser() {
return user;
}
public void setUser(Set<User> user) {
this.user = user;
}
}

数据库设计三范式:

1.要有主键,列不可分

2.联合主键的情况不能存在部分依赖

3.不能存在传递依赖























public class HibernateCoreAPITest {

private static SessionFactory sf = null;

@BeforeClass

public static void beforeClass() {

sf = new AnnotationConfiguration().configure().buildSessionFactory();

}

@Test

public void testTeacherSave() {

Session session = sf.openSession();  //永远是创建一个新的session,不会是那原来的那个session(比较旧的方法)

//Session session = sf.getCurrentSession(); //如果当前的上下文环境中没有session,就创建一个新的session,如果已经有一个session,就使用旧的session

session.beginTransaction();

session.save(t);

session.getTransaction().commit(); 

session.close();

}

@AfterClass

public static void afterClass() {

sf.close();

}

}

以上程序事要说明:sessionFactory.getCurrentSession(); 当session在提交之前(即在执行session.getTransaction().commit();),不论拿多少个session, 他都拿的是同一个session,但是当session一旦提交之后,则该session就会关闭,再通过sessionFactory.getCurrentSession()取得的session就不再是之前的那个session了,它会重新创建一个session。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hibernate java ssh