"该资源主要介绍了Hibernate框架中的一些核心概念和使用技巧,特别是关于自动生成功能、数据库关键字处理、HQL查询、数据库分页、级联操作以及继承关系的处理。"
在Hibernate中,自动生成功器是用于在数据库中自动生成主键值的一种机制。"此时ID即是主键也是外键"表示在一个特定的关系映射中,某个ID字段既作为当前表的主键,同时也作为另一张表的外键,这在一对多或多对一的关系中常见。例如,用户表和订单表,用户ID既是用户表的主键,也是订单表的外键,表示订单属于哪个用户。
当表名或字段名与数据库的关键字冲突时,有两种解决办法:一是避免使用关键字,为表或字段重新命名;二是使用反引号将表名或字段名括起来,以告诉数据库系统这是一个标识符而非关键字。
在Hibernate的查询语句中,可以使用HQL(Hibernate Query Language)进行操作,如“:n”用于表示从第n个记录开始查询,以及限制查询结果的数量来实现分页。此外,Criteria查询提供了一种面向对象的方式来检索数据,同样支持数据库分页。
对于一对多或多对一的关系,Hibernate默认会基于主表的主键创建外键关联。如果不想使用默认设置,可以通过“property-ref”属性指定参照主表的字段。如果不指定,可能会导致中间表的主键冲突。
在集合类型如List和Set的使用上,它们的区别在于Set不允许重复元素,而List则可以。在级联操作中,如果设置了级联保存或更新,那么当父对象(如Emps)发生变化时,子对象(如Employee)也会相应地更新。反之,如果不开启级联,子对象就不会被自动保存或更新。注意,有序集合如List和Array不能使用级联操作来维护关联关系。
在处理继承关系时,鉴别器(discriminator)是一个很重要的概念,它用于在数据库中区分不同子类的实例。同时,为了保证每个子类实例的唯一性,子类的ID不能与父类的ID相同,并且不能使用自增的主键生成策略(如native),可以选择uuid或hilo等其他策略。
最后,Hibernate默认使用懒加载(lazy loading)策略,以提高性能,只有在真正需要时才会加载关联的对象。而EAGER加载则会立即加载关联的对象,但这可能会影响性能,因为可能会导致更多的数据库查询。