Hibernate的getTransaction()和beginTransaction()

session.getTransaction()只是根据session获得一个Transaction实例,但是并没有启动它

session.beginTransaction()在获得一个Transaction后调用其begin()方法

(1)

session = HibernateUtil.getSession();//这是开启Session的操作
session.beginTransaction();//这是开启Transaction的操作
session.save(user);//这正是把数据放入一级缓存session中的操作
session.getTransaction().commit();//此处才是真正与数据库交互的语句

(2)

Session session=HibernateTools.getSession();
Transaction tx=session.beginTransaction();

session.save(user);

tx.commit();
session.close();

如:

public static void main(String[] args) throws ParseException {
//获取配置文件
Configuration configuration = new Configuration().configure();
//注册服务对象
StandardServiceRegistryBuilder serviceRegistryBuilder = new StandardServiceRegistryBuilder();
StandardServiceRegistry serviceRegistry = serviceRegistryBuilder.applySettings(configuration.getProperties()).build();
//获取SessionFactory
SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);
//获取session
Session session = sessionFactory.openSession();
//开启事务
session.beginTransaction();
//************开始操作*************//
//1. 利用 get 方法获取 id 为 1 的用户数据
Commodity getCommodity = (Commodity) session.get(Commodity.class, 1);
System.out.println("创建日期:" + getCommodity.getCreateDate() + "描述:" + getCommodity.getDescribe() + "修改日期:" + getCommodity.getModifyDate() + "名称:" + getCommodity.getName());

// Date date = new Date(0);
String stringdate = "2019-05-07";
Date date = new SimpleDateFormat("YYYY-MM-DD").parse(stringdate);

//2.增加商品
// Commodity newCommodity = new Commodity(date,"电器1",date,"电饭锅2");
// session.save(newCommodity);

//3.删
// Commodity getCommodity1 = (Commodity) session.load(Commodity.class, 2);
// session.delete(getCommodity1);
// session.getTransaction().commit();

//4.改
// Commodity getCommodity2 = (Commodity) session.get(Commodity.class, 1);
// getCommodity2.setName("洗脸盆");
// session.update(getCommodity2);
// session.getTransaction().commit();
//************结束操作*************//

//提交事务
session.getTransaction();
//关闭session
session.close();
//关闭SessionFactory
sessionFactory.close();
}

再如:

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;

import online.shixun.shop.model.User;

public class HibernateDemo {

public static void main(String[] args) {
// 获取配置文件
Configuration configuration = new Configuration().configure();
// 注册服务对象
StandardServiceRegistryBuilder serviceRegistryBuilder = new StandardServiceRegistryBuilder();
StandardServiceRegistry serviceRegistry = serviceRegistryBuilder.applySettings(configuration.getProperties()).build();
// 获取 SessionFactory
SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);
// 获取 Session
Session session = sessionFactory.openSession();
// 开启事务
session.beginTransaction();

//***************开始数据操作***************//

//1. 利用 get 方法获取 id 为 1 的用户数据
User getUser = (User) session.get(User.class, 1);
System.out.println("Get 用户名/密码/年龄:" + getUser.getName() + "/" + getUser.getPassword() + "/" + getUser.getAge());

//2. 利用 load 方法获取 id 为 1 的用户数据
User loadUser = (User) session.load(User.class, 1);
System.out.println("Load 用户名/密码/年龄:" + loadUser.getName() + "/" + loadUser.getPassword() + "/" + loadUser.getAge());

//3. 利用 save 方法新增用户数据(执行完成以下语句,利用数据库客户端工具查询表中是否有新数据增加)
User newUser = new User("武汉", "innovaee", 16);
session.save(newUser);

//4. 利用 saveOrUpdate 方法,修改 getUser 数据
getUser.setName("轻实训!");
session.saveOrUpdate(getUser);

//5. 利用 delete 方法删除 getUser 数据
session.delete(getUser);

//***************结束数据操作***************//

// 提交事务
session.getTransaction().commit();
// 关闭 Sessin
session.close();
// 关闭 SessionFactory
sessionFactory.close();
}
}

时间: 2024-10-25 11:09:13

Hibernate的getTransaction()和beginTransaction()的相关文章

比较JPA的EntityManager接口与Hibernate的Session接口

本文对JPA的EntityManager接口与Hibernate的Session接口进行了比较,本文参考<精通JPA与Hibernate:Java对象持久化技术详解>第3版,2020年出版,作者:孙卫琴. EntityManager接口与Session接口的许多功能很相似,以下表1-1对这两个接口的方法做了对比.表1-1 对比EntityManager接口与Session接口 从以上表可以看出,EntityManager接口中的大部分方法在Sesson接口中都有对应的方法.EntityMana

hibernate 深入理解持久化对象

hibernate 完全采用面向对象的方式来操作数据库,因此开发者眼里只有对象.属性,无须理会数据库.表.列等概念. 持久化类的要求 Hibernate 采用低侵入式设计,所以对持久化类的要求也是只要是简单的pojo即可. 虽然hibernate对持久化没什么要求,但应遵守如下规则: -提供一个无参的构造器,这样hibernate就可以使用Constructor.newInstance()来创建持久化实例了. -提供 一个标识属性,通常是映射数据库的主键字段 -对象的属性应尽量避免使用最基本的类

Spring + Hibernate 项目配置(java class版本)

1. 写测试用例 说明:使用spring的原因我可以轻松配置Bean方便进行依赖注入 其中HibernateConfig是bean的配置文件 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes=HibernateConfig.class) public class TestMessage { @Autowired private SessionFactory sessionFactory; @Test pub

程序中事务控制

事务控制概述 编程式事务控制          自己手动控制事务,就叫做编程式事务控制. Jdbc代码: Conn.setAutoCommite(false);  // 设置手动控制事务 Hibernate代码: Session.beginTransaction();    // 开启一个事务 [细粒度的事务控制: 可以对指定的方法.指定的方法的某几行添加事务控制] (比较灵活,但开发起来比较繁琐: 每次都要开启.提交.回滚.) 声明式事务控制 Spring提供了对事务的管理, 这个就叫声明式事

spring笔记(三)

Spring 第二天: 1. 代理模式 2. Aop编程 3.Spring对Jdbc的支持 JdbcTemplate工具类 思考: 程序的"事务控制", 可以用aop实现! 即只需要写一次,运行时候动态织入到业务方法上. Spring提供了对事务的管理,开发者只需要按照Spring的方式去做就行. 目标: 1. Spring声明式事务管理 * XML配置 *注解方式 2. Spring与Hibernate整合 3.  SSH整合 1. 程序中事务控制 1.1 环境准备 用户访问->

(8)Spring的事务控制

程序的"事务控制", 可以用aop实现! 即,只需要写一次,运行时候动态植入到业务方法上. Spring提供了对事务的管理. 1.事务控制概述 用户访问-->Action --> Service --> Dao 一个业务操作的成功: 调用的service是执行成功的,意味着service中调用的所有的dao是执行成功的. 因此事务应该在Service层统一控制. 1.1.编程式事务控制 自己手动控制事务,就叫做编程式事务控制.这属于细粒度的事务控制: 可以对指定的方法

java web sql注入测试(2)---实例测试

以下篇幅,用一个简单的实例说明如何进行测试. 功能:根据用户NAME删除用户,采用的是SQL拼接的方式,核心代码部分如下: public static void deleteByName(String name)throws Exception{ Session session = seesionfactory.openSession(); org.hibernate.Transaction tx = session.beginTransaction(); try { String hql="d

[Ljava.lang.Object; cannot be cast to mediatek.Pro

使用Hibernate 进行查询错误: In the following code I am trying to get a List of Products which contains all the products in the database: org.hibernate.Transaction tx = session.beginTransaction(); products = session.createSQLQuery("SELECT * FROM Products"

java事务理解

还在学Hibernate,后续一大堆概念刚接触需要理解.觉得-——事务——这个概念不是很好理解,所以发上来记录一下. 首先说点千篇一律的东西.概念和特性都是随处可见的,无论哪里都很容易找到,关键是你如何去理解它. 概念:事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit).事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并用形如begin transaction和end transaction语句(或函数调