Hibernate:并发控制

Hibernate:并发控制

.实体类:Student.java

public class Student {
	private Integer sid;		 
	private String sname;		 
	private Integer version;
	public Integer getSid() {
	  return sid;
	 }
	 public void setSid(Integer sid) {
	  this.sid = sid;
	 }
	 public String getSname() {
	  return sname;
	 }
	 public void setSname(String sname) {
	  this.sname = sname;
	 }
	 public Integer getVersion() {
	  return version;
	 }
	 public void setVersion(Integer version) {
	  this.version = version;
	 }	
}

2.hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
 "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
 <hibernate-configuration>
 <session-factory>
 <!-- 1. 数据库相关 -->
  <property name="connection.username">root</property>
  <property name="connection.password">123</property>
  <property name="connection.url">jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=UTF-8</property>
  <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
  <!-- 连接MySQL数据库 -->
  <property name="dialect">org.hibernate.dialect.MySQLDialect</property> 
  <!-- 2.配置本地事务(No CurrentSessionContext configured!) -->
  <property name="hibernate.current_session_context_class">thread</property>
  
  <!-- 3. 调试相关 -->
  <property name="show_sql">true</property>
  <property name="format_sql">true</property>
  <!-- 4.hibernate需要管理的数据库表对应的实体类映射文件 -->
  <mapping resource="com/crud/two/entity/student.hbm.xml"></mapping>
   </session-factory>
</hibernate-configuration>

3.student.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
	 <class table="t_hibernate_student" name="com.crud.two.entity.Student">
	 <id name="sid" type="java.lang.Integer" column="sid">
		 <generator class="increment"></generator>         
         </id>
         <!-- version需写在property前面,否则会报错 -->
        <version name="version" type="java.lang.Integer" column="versionqq"></version>
  	<property name="sname" type="java.lang.String" column="sname"></property>
  	  </class>
    </hibernate-mapping>

4.测试代码:
dao方法:

public class StudentDao {
//修改方法
 public void updateStudent(Student student) {
  Session session = SessionFactoryUtils.getSession();
  Transaction transaction = session.beginTransaction();
  session.update(student);
  transaction.commit();
  session.close();
 }
}

测试类:Junit 测试

public class StudentDaoTest {
@Test
 public void testUpdateStudent() {
  Student stu=new Student();
  stu.setSid(7);
  stu.setSname("哈哈哈");
  /*stu.setVersion(1);*/    //第一次修改
  stu.setVersion(2);        //第二次修改
  
  this.userDao.updateStudent(stu);
 }
}

第一次修改时可以修改,第二次已不能修改,
因为versionqq已改变,为2,hibernate自动给versionqq加1
如若要再次进行修改,把最新信息传过来即可,即stu.setVersion(2);

第一个修改方法执行之后,再次执行的话,会报错:
(Exception in thread “main” org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect):
在这里插入图片描述
可以看到,如果第二次执行修改数据时,记录的版本号已经被更新过了,所以抛出了红色的异常,我们可以在实际应用 中处理这个异常,例如在处理中重新读取数据库中的数据,同时将目前的数据与数据库中的数据展示出来,让使用者有机会比较一下,或者设计程序自动读取新的数 据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图像识别技术在病虫害检测中的应用是一个快速发展的领域,它结合了计算机视觉和机器学习算法来自动识别和分类植物上的病虫害。以下是这一技术的一些关键步骤和组成部分: 1. **数据收集**:首先需要收集大量的植物图像数据,这些数据包括健康植物的图像以及受不同病虫害影响的植物图像。 2. **图像预处理**:对收集到的图像进行处理,以提高后续分析的准确性。这可能包括调整亮度、对比度、去噪、裁剪、缩放等。 3. **特征提取**:从图像中提取有助于识别病虫害的特征。这些特征可能包括颜色、纹理、形状、边缘等。 4. **模型训练**:使用机器学习算法(如支持向量机、随机森林、卷积神经网络等)来训练模型。训练过程中,算法会学习如何根据提取的特征来识别不同的病虫害。 5. **模型验证和测试**:在独立的测试集上验证模型的性能,以确保其准确性和泛化能力。 6. **部署和应用**:将训练好的模型部署到实际的病虫害检测系统中,可以是移动应用、网页服务或集成到智能农业设备中。 7. **实时监测**:在实际应用中,系统可以实时接收植物图像,并快速给出病虫害的检测结果。 8. **持续学习**:随着时间的推移,系统可以不断学习新的病虫害样本,以提高其识别能力。 9. **用户界面**:为了方便用户使用,通常会有一个用户友好的界面,显示检测结果,并提供进一步的指导或建议。 这项技术的优势在于它可以快速、准确地识别出病虫害,甚至在早期阶段就能发现问题,从而及时采取措施。此外,它还可以减少对化学农药的依赖,支持可持续农业发展。随着技术的不断进步,图像识别在病虫害检测中的应用将越来越广泛。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值