精通Hibernate ORM 5.3.7.Final:用户指南

需积分: 10 6 下载量 47 浏览量 更新于2024-07-18 收藏 10.6MB PDF 举报
"Hibernate ORM 5.3.7.Final User Guide 是一本针对 Hibernate ORM 5.3.7 版本的用户手册,由多位专家共同编写,包括 Vlad Mihalcea, Steve Ebersole 等。该指南涵盖了一系列主题,如架构、领域模型、启动配置、数据库访问、事务管理等,旨在帮助开发者更好地理解和使用 Hibernate ORM 框架。" Hibernate ORM 是一个流行的Java持久化框架,它允许开发者以面向对象的方式操作数据库,极大地简化了Java应用与关系数据库之间的交互。5.3.7.Final 版本是 Hibernate ORM 的一个稳定版本,提供了许多增强特性和错误修复。 **1. 基本概念** - **Architecture(架构)**:Hibernate ORM 架构基于 JPA(Java Persistence API),它通过实体类、映射文件或注解将Java对象与数据库表关联。核心组件包括 SessionFactory、Session 和 Transaction,它们分别对应数据库连接池、单个数据库会话和事务管理。 **2. Domain Model(领域模型)**:领域模型是业务逻辑中的核心,Hibernate 允许开发者定义实体类来代表数据库中的表,并通过注解或XML配置文件进行映射。 **3. Bootstrap(启动配置)**:配置 Hibernate 需要设置数据库连接信息、缓存配置、实体扫描路径等,这可以通过 Hibernate 的配置文件或编程式方式进行。 **4. Schema Generation(模式生成)**:Hibernate 可以自动创建或更新数据库模式,根据实体类自动生成相应的表结构。 **5. Persistence Context(持久化上下文)**:持久化上下文是Hibernate 中的概念,它是一个内存中的对象状态管理器,跟踪实体的状态变化并负责与数据库的同步。 **6. Flushing(刷新)**:当实体的状态发生变化时,Hibernate 会在适当的时间将这些变化同步到数据库,这个过程称为刷新。 **7. Database Access(数据库访问)**:Hibernate 提供了 Criteria API、HQL(Hibernate Query Language)和 JPQL(Java Persistence Query Language)用于查询数据库,以及原生SQL支持。 **8. Transactions and Concurrency Control(事务和并发控制)**:Hibernate 支持事务管理和并发控制,如乐观锁和悲观锁,确保数据的一致性。 **9. JNDI(Java Naming and Directory Interface)**:在应用服务器环境中,Hibernate 可以通过 JNDI 查找数据源,实现更灵活的部署。 **10. Locking(锁定)**:Hibernate 提供了多种锁定机制,如共享锁和排他锁,以处理多用户并发访问。 **11. Fetching(加载策略)**:Hibernate 支持懒加载和急加载,以及分批加载和关联加载,优化数据检索性能。 **12. Batching(批量操作)**:批量操作可以显著提高性能,包括批量插入、更新和删除。 **13. Caching(缓存)**:Hibernate 使用二级缓存提高数据访问速度,例如 Ehcache 或 Infinispan。 **14. Interceptors and Events(拦截器和事件)**:允许在特定操作(如保存、更新、删除等)前后执行自定义逻辑。 **15. HQL and JPQL(查询语言)**:Hibernate 自定义的面向对象的查询语言,类似于 SQL 但更贴近于 Java 对象。 **16. Criteria(条件查询)**:提供了一种更面向对象的方式来构建动态查询。 **17. Native SQL Queries(原生SQL查询)**:当HQL和JPQL无法满足需求时,可以直接使用原生SQL进行查询。 **18. Spatial(空间数据)**:支持对地理空间数据的操作。 **19. Multitenancy(多租户)**:允许在一个应用程序中处理多个独立的客户数据。 **20. OSGi(Open Service Gateway Initiative)**:支持在 OSGi 容器中运行 Hibernate。 **21. Envers(审计)**:提供对实体的版本控制和历史记录,便于审计和回滚。 **22. Database Portability Considerations(数据库移植性)**:Hibernate 具有良好的数据库无关性,允许在不同数据库间迁移。 **23. Configurations(配置)**:详细介绍了如何配置 Hibernate,包括属性、连接池和缓存设置等。 **24. Mapping annotations(映射注解)**:讲解如何使用注解进行对象-关系映射。 **25. Performance Tuning and Best Practices(性能调优和最佳实践)**:提供了一系列提高 Hibernate 性能的建议和方法。 **26. Legacy Bootstrapping(遗留启动配置)**:针对旧版 Hibernate 的启动方式。 **27. Migration(迁移)**:指导如何从旧版本的 Hibernate 迁移到新版本。 **28. Legacy Domain Model(遗留领域模型)**:关于老版本 Hibernate 中的领域模型。 **29. Legacy Hibernate Criteria Queries(遗留Hibernate条件查询)**:有关老版 Hibernate Criteria 查询的信息。 **30. Legacy Hibernate Native Queries(遗留Hibernate原生查询)**:旧版 Hibernate 中原生 SQL 查询的使用方法。 **31. References(参考)**:包含其他相关的文档和资源链接。 这份用户指南是开发者学习和使用 Hibernate ORM 的宝贵参考资料,涵盖了从基础概念到高级特性的全方位内容。对于任何想要深入了解 Hibernate 并优化其应用性能的人来说,都是不可或缺的读物。

Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1 org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1 at org.hibernate.jdbc.Expectations$BasicExpectation.checkBatched(Expectations.java:61) at org.hibernate.jdbc.Expectations$BasicExpectation.verifyOutcome(Expectations.java:46) at org.hibernate.jdbc.BatchingBatcher.checkRowCounts(BatchingBatcher.java:68) at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48) at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:246) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:235) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:140) at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298) at org.hibernate.event.def.DefaultAutoFlushEventListener.onAutoFlush(DefaultAutoFlushEventListener.java:41) at org.hibernate.impl.SessionImpl.autoFlushIfRequired(SessionImpl.java:969) at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1690) at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:142) at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:152) at com.sinosoft.sysframework.persistence.HibernateSQLQuery.doInHibernate(HibernateSQLQuery.java:118) at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:366) at org.springframework.orm.hibernate3.HibernateTemplate.executeFind(HibernateTemplate.java:338) at com.sinosoft.sysframework.persistence.BaseDaoHibernateImpl.queryList(BaseDaoHibernateImpl.java:224) at com.sinosoft.application.reins.persistence.hibernate.base.GrRePlanItemDaoHibernateImplBase.find(GrRePlanItemDaoHibernateImplBase.java:127) at com.sinosoft.application.reins.service.spring.GrTrialServiceSpringImpl.endorTrialDataSurrender(GrTrialServiceSpringImpl.java:9536) at com.sinosoft.application.reins.service.

2023-06-03 上传