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

作者:goldensun 时间:2023-04-17 14:41:13 

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;
 }
}
标签:Java,Hibernate
0
投稿

猜你喜欢

  • Android判断当前App是在前台还是在后台

    2022-09-20 10:37:49
  • Unity实现截图功能

    2022-02-18 11:36:18
  • JAVA语言编程格式高级规范

    2021-08-21 01:43:54
  • Java框架设计灵魂之反射的示例详解

    2023-06-13 21:34:34
  • FeignClient如何脱离eureka自定义URL

    2022-08-27 01:37:25
  • SpringBoot详细讲解静态资源导入的实现

    2023-07-26 13:23:21
  • Java SimpleDateFormat与System类使用示例详解

    2021-10-25 23:15:55
  • java计算给定字符串中出现次数最多的字母和该字母出现次数的方法

    2022-01-13 03:00:04
  • Webview实现android简单的浏览器实例代码

    2023-04-20 15:21:57
  • 高并发下如何避免重复数据产生技巧

    2022-04-17 07:08:57
  • java实现简单单链表

    2023-10-30 09:45:46
  • Android SQLite数据库连接实现登录功能

    2022-09-04 01:51:46
  • Android自定义Seekbar滑动条 Pop提示跟随滑动按钮滑动

    2021-11-02 20:32:06
  • SpringBoot Bean被加载时进行控制

    2022-10-01 14:06:53
  • Android getevent用法实例详解

    2021-06-27 10:03:35
  • JavaCV实现读取视频信息及自动截取封面图详解

    2022-05-20 14:43:05
  • 基于@PathVariable注解的用法说明

    2023-10-01 17:22:55
  • C#最简单的字符串加密解密方法

    2022-10-30 12:46:36
  • SpringMVC框架整合Junit进行单元测试(案例详解)

    2022-04-10 20:53:37
  • IntelliJ IDEA如何设置JDK版本

    2022-08-27 07:46:03
  • asp之家 软件编程 m.aspxhome.com