欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

简介Java的Hibernate框架中的Session和持久化类

程序员文章站 2024-03-08 15:15:46
session session对象用于获取与数据库的物理连接。 session对象是重量轻,设计了一个互动是需要与数据库每次被实例化。持久化对象被保存,并通过一个sess...

session
session对象用于获取与数据库的物理连接。 session对象是重量轻,设计了一个互动是需要与数据库每次被实例化。持久化对象被保存,并通过一个session对象中检索。

会话中的对象不应该保持开放很长一段时间,因为他们通常不被线程安全的,他们应该被创建并根据需要摧毁他们。这次会议的主要功能是提供创建,读取和删除操作映射的实体类的实例。实例中可能存在以下三种状态之一在给定时间点:

短暂性: 持久化类的未与会话相关联,并在数据库中没有代表性,没有标识值的新实例被hibernate认为是暂时的。

持久性: 可以做一个瞬态的实例持久化通过将它与一个会话相关联。持久性实例都有一个表示在数据库中,一个标识符值,与会话相关联。

独立性: 一旦我们关闭hibernate的session,持久化实例将成为一个分离的实例。

一个session实例是可序列化的,如果它的持久化类是可序列化的。一个典型的事务应该使用下面的语句:

session session = factory.opensession();
transaction tx = null;
try {
  tx = session.begintransaction();
  // do some work
  ...
  tx.commit();
}
catch (exception e) {
  if (tx!=null) tx.rollback();
  e.printstacktrace(); 
}finally {
  session.close();
}

如果session抛出异常,事务必须回滚,会话必须被丢弃。

持久化类
hibernate的整个概念是采取从java类属性的值,并将持久到数据库表。一个映射文件hibernate的帮助确定如何从拉动类的值,并将它们映射与表和相关的域。

其对象或实例将存储在数据库表中的java类在hibernate中称为持久化类。 hibernate的效果最好,如果这些类遵循一些简单的规则,也称为普通java对象(pojo)编程模型。有下列持久化类的主要规则,但是,这些规则并不是必需的。

将所有的持久化java类需要一个默认的构造函数。

所有类应该包含为了让容易识别对象内hibernate和数据库的id。此属性映射到数据库表的主键列。

所有属性将被持久化应该声明为private,并已在javabean风格的定义的getxxx和setxxx方法。

hibernate的关键功能,代理,取决于持久化类或者是非final的,或者说声明的所有公共方法的接口的实现。

所有的类不扩展或实现的ejb框架需要进行一些专门的类和接口。

pojo名称用于强调一个给定的对象是一个普通的java对象,而不是一个特殊的对象,好更不是enterprise javabean。

一个简单的pojo例子:
基于上面提到的一些规则,我们可以如下定义一个pojo类:

public class employee {
  private int id;
  private string firstname; 
  private string lastname;  
  private int salary; 

  public employee() {}
  public employee(string fname, string lname, int salary) {
   this.firstname = fname;
   this.lastname = lname;
   this.salary = salary;
  }
  public int getid() {
   return id;
  }
  public void setid( int id ) {
   this.id = id;
  }
  public string getfirstname() {
   return firstname;
  }
  public void setfirstname( string first_name ) {
   this.firstname = first_name;
  }
  public string getlastname() {
   return lastname;
  }
  public void setlastname( string last_name ) {
   this.lastname = last_name;
  }
  public int getsalary() {
   return salary;
  }
  public void setsalary( int salary ) {
   this.salary = salary;
  }
}