hibernate笔记

来源:互联网 发布:淘宝上的海外专营店 编辑:程序博客网 时间:2024/06/11 11:59


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


0 0