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;
}
}
数据库设计三范式:
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。