二手市场网站建设的目的,怎么制作网站弹出广告,北京征集网站建设,wordpress 本地数据库Hibernate是一个开源的ORM#xff08;对象关系映射#xff09;框架#xff0c;用于将Java程序中的对象映射到数据库中的关系型数据。在Hibernate中#xff0c;持久化类是用来映射Java对象和关系型数据库表的类。
编写Hibernate持久化类需要遵循以下规则#xff1a;
持久…Hibernate是一个开源的ORM对象关系映射框架用于将Java程序中的对象映射到数据库中的关系型数据。在Hibernate中持久化类是用来映射Java对象和关系型数据库表的类。
编写Hibernate持久化类需要遵循以下规则
持久化类必须有一个无参构造函数否则Hibernate无法创建对象。持久化类必须映射到数据库中的表可以使用Table注解指定表名。持久化类的属性必须与数据库表的列一一对应可以使用Column注解指定列名。持久化类必须有一个唯一标识符可以使用Id注解指定。持久化类的属性可以使用Basic注解指定是否为基本类型如字符串、数字等。持久化类的属性可以使用Transient注解指定不需要持久化到数据库中。
在Hibernate中主键生成策略有多种常见的有自增、UUID、序列等。可以使用GeneratedValue注解指定主键生成策略例如
Id
GeneratedValue(strategy GenerationType.IDENTITY)
private Long id;
其中GeneratedValue注解中的strategy属性指定主键生成策略的方式IDENTITY表示使用自增方式生成主键。
除了使用注解指定主键生成策略外还可以使用XML文件配置主键生成策略例如
id nameid typejava.lang.Longcolumn nameid /generator classidentity /
/id
其中标签中的class属性指定主键生成策略的方式identity表示使用自增方式生成主键。
Hibernate的持久化类的三种状态
在Hibernate中持久化类有三种状态瞬时状态、持久状态和游离状态。
瞬时状态持久化类对象没有与Session关联也没有被保存到数据库中此时修改对象的属性不会被保存到数据库。持久状态持久化类对象已经被保存到数据库中并与Session关联此时修改对象的属性会被保存到数据库。游离状态持久化类对象已经被保存到数据库中但是与Session已经脱离关系此时修改对象的属性不会被保存到数据库。
可以使用Session的save、persist、update、merge方法来将持久化类对象从瞬时状态转换为持久状态或游离状态。
save方法用于将瞬时状态的对象保存到数据库中并返回持久状态的对象。如果对象已经是持久状态则不执行任何操作。
persist方法用于将瞬时状态的对象保存到数据库中不返回持久状态的对象。如果对象已经是持久状态则不执行任何操作。
update方法用于将游离状态的对象更新到数据库中并返回持久状态的对象。如果对象是瞬时状态则抛出异常。
merge方法用于将游离状态的对象合并到Session中并返回持久状态的对象。如果对象是瞬时状态则将对象保存到数据库中并返回持久状态的对象。
Hibernate的一级缓存
Hibernate的一级缓存是Session级别的缓存用于缓存持久化类对象。当从数据库中查询持久化类对象时Hibernate会先从一级缓存中查找如果缓存中不存在则从数据库中查询并将查询结果放入一级缓存中。
一级缓存的生命周期与Session相同当Session关闭时一级缓存也会被清空。可以使用Session的evict、clear方法来清空一级缓存。
evict方法用于将指定的对象从一级缓存中移除使得对象变成游离状态。
clear方法用于清空一级缓存中的所有对象将所有持久状态的对象变成游离状态。
Hibernate的事务管理
在Hibernate中事务用于保证对数据库的操作具有原子性、一致性、隔离性和持久性。可以使用Transaction接口来管理事务例如
Session session sessionFactory.openSession();
Transaction tx session.beginTransaction();
try {// 执行数据库操作tx.commit();
} catch (Exception e) {tx.rollback();
} finally {session.close();
}
在事务中可以使用Session的save、persist、update、merge、delete等方法来操作持久化类对象并在事务提交时将操作结果保存到数据库中。
Hibernate的其他API
除了以上介绍的API外Hibernate还提供了许多其他的API例如
Criteria API用于动态查询持久化类对象。HQLHibernate Query Language一种基于SQL的查询语言用于查询持久化类对象。Named Query将HQL查询语句保存在持久化类中方便重复使用。Second-level Cache用于缓存持久化类对象提高查询效率。
以上是Hibernate的持久化类编写规则、主键生成策略、持久化类状态、一级缓存、事务管理和其他API等内容的介绍。希望本文能够帮助读者更好地理解Hibernate框架的使用。
Hibernate的实体类关系映射
在Hibernate中实体类之间的关系可以通过注解、XML配置文件或者Java代码来进行映射。常用的关系有一对一、一对多、多对一和多对多。
一对一关系
一对一关系表示两个实体类之间的关系是一对一的关系。在Hibernate中可以使用OneToOne注解来进行映射。
例如一个Person实体类和一个IDCard实体类之间的关系是一对一的关系可以使用如下的代码进行映射
Entity
public class Person {IdGeneratedValue(strategy GenerationType.IDENTITY)private Long id;private String name;OneToOne(mappedBy person, cascade CascadeType.ALL)private IDCard idCard;// getters and setters
}Entity
public class IDCard {IdGeneratedValue(strategy GenerationType.IDENTITY)private Long id;private String number;OneToOneJoinColumn(name person_id)private Person person;// getters and setters
}
其中Person实体类中使用了OneToOne注解来映射与IDCard实体类的关系属性mappedBy指定了IDCard实体类中的person属性与Person实体类中的idCard属性之间的关系cascade属性指定了级联操作。
IDCard实体类中使用了OneToOne注解来映射与Person实体类的关系属性JoinColumn指定了Person实体类中与IDCard实体类关联的外键列名。
一对多关系
一对多关系表示一个实体类可以对应多个另一个实体类的对象。在Hibernate中可以使用OneToMany注解来进行映射。
例如一个Department实体类中有多个Employee实体类的对象可以使用如下的代码进行映射
Entity
public class Department {IdGeneratedValue(strategy GenerationType.IDENTITY)private Long id;private String name;OneToMany(mappedBy department, cascade CascadeType.ALL)private ListEmployee employees;// getters and setters
}Entity
public class Employee {IdGeneratedValue(strategy GenerationType.IDENTITY)private Long id;private String name;ManyToOneJoinColumn(name department_id)private Department department;// getters and setters
}
其中Department实体类中使用了OneToMany注解来映射与Employee实体类的关系属性mappedBy指定了Employee实体类中的department属性与Department实体类中的employees属性之间的关系cascade属性指定了级联操作。
Employee实体类中使用了ManyToOne和JoinColumn注解来映射与Department实体类的关系属性JoinColumn指定了Department实体类中与Employee实体类关联的外键列名。
多对一关系
多对一关系表示多个实体类可以对应一个另一个实体类的对象。在Hibernate中可以使用ManyToOne注解来进行映射。
例如一个Employee实体类所属于一个Department实体类可以使用如下的代码进行映射
Entity
public class Department {IdGeneratedValue(strategy GenerationType.IDENTITY)private Long id;private String name;// getters and setters
}Entity
public class Employee {IdGeneratedValue(strategy GenerationType.IDENTITY)private Long id;private String name;ManyToOneJoinColumn(name department_id)private Department department;// getters and setters
}
其中Employee实体类中使用了ManyToOne和JoinColumn注解来映射与Department实体类的关系属性JoinColumn指定了Department实体类中与Employee实体类关联的外键列名。
多对多关系
多对多关系表示多个实体类之间互相关联。在Hibernate中可以使用ManyToMany注解来进行映射。
例如一个Student实体类可以选择多个Course实体类一个Course实体类也可以有多个Student实体类可以使用如下的代码进行映射
Entity
public class Student {IdGeneratedValue(strategy GenerationType.IDENTITY)private Long id;private String name;ManyToMany(mappedBy students, cascade CascadeType.ALL)private ListCourse courses;// getters and setters
}Entity
public class Course {IdGeneratedValue(strategy GenerationType.IDENTITY)private Long id;private String name;ManyToManyJoinTable(name course_student,joinColumns JoinColumn(name course_id),inverseJoinColumns JoinColumn(name student_id))private ListStudent students;// getters and setters
}
其中Student实体类中使用了ManyToMany注解来映射与Course实体类的关系属性mappedBy指定了Course实体类中的students属性与Student实体类中的courses属性之间的关系cascade属性指定了级联操作。
Course实体类中使用了ManyToMany和JoinTable注解来映射与Student实体类的关系属性JoinTable指定了关联表的名称和两个实体类之间的关联关系。
以上是Hibernate的实体类关系映射的相关介绍希望本文能够帮助读者更好地掌握Hibernate框架的使用。