Java持久化类设计原则与newInstance方法解析

需积分: 9 1 下载量 138 浏览量 更新于2024-08-23 收藏 2.51MB PPT 举报
"十持久化Java类必须遵循的原则-hibernate基础教程" 在Java开发中,特别是涉及到持久化操作如使用Hibernate框架时,理解并遵循特定的编程原则至关重要。本教程主要探讨了Java类在用于持久化时应遵循的四个基本原则: 1. **属性访问方法**:持久化的Java类通常采用JavaBeans模式,需要为每个字段提供getter和setter方法,以便Hibernate能够读取和设置这些字段的值。这是Hibernate进行数据映射的基础。 2. **默认构造方法**:为了使Hibernate能够通过反射机制实例化对象,类必须提供一个默认的无参数构造方法。这样,Hibernate可以使用`Constructor.newInstance()`来创建新对象。 3. **集合属性类型**:如果类包含集合类型的属性,如List或Set,这些集合应声明为接口类型而非其实现类。例如,使用`List`而不是`ArrayList`,使用`Set`而不是`HashSet`。这样做是为了保持与具体实现的解耦,允许Hibernate使用它自己的集合实现。 4. **标识属性**:每个持久化类都应包含一个标识属性,这通常是主键,用来唯一标识数据库中的记录。这个属性对于实现级联更新、`Session.saveOrUpdate()`等操作至关重要。 此外,讨论还涉及了实例化对象时`newInstance()`方法和`new`关键字的区别。`new`关键字直接创建类的新实例,而`newInstance()`方法则是通过反射机制来实现,它依赖于类已经被加载和连接。`newInstance()`提供了更多的灵活性,可以在运行时动态加载类,这对于插件系统或依赖注入等场景非常有用。然而,它的效率较低,只能调用无参数构造函数,而`new`关键字则可以调用任何公共构造函数,具有更强的类型安全性。 在Hibernate中,对象的状态管理也是核心概念之一: - **游离状态(Detached)**:对象不在Session的管理范围内,但具有持久化身份。 - **持久化状态(Persistent)**:对象与Session关联,并且其更改会在提交时同步到数据库。 - **临时状态(Transient)**:对象未被持久化,与Session无关。 操作这些状态的对象,可以使用`save()`, `persist()`, `saveOrUpdate()`, `delete()`, `update()`, `merge()`, `lock()`, 或 `replicate()`等方法,它们对应不同的数据库操作,如INSERT, DELETE, 和 UPDATE。 举例来说,以下代码展示了如何使用Hibernate执行SQL查询: ```java String hql = "SELECT * FROM Person WHERE name=? AND sex=?"; List<Object[]> objs = session.createSQLQuery(hql).list(); Object[] obj = objs.get(0); System.out.println(obj[0]); // 打印查询结果 ``` 这段代码使用`createSQLQuery()`创建一个SQL查询,并通过`list()`获取结果列表,进一步处理查询结果。 总结起来,Java类在用于Hibernate持久化时需遵循特定原则,同时了解实例化对象的不同方式以及对象状态管理是深入理解和使用Hibernate的基础。