hibernate usertype优劣网上有不少说法,下面是我的感受。
好处是能自定义符合自己的类型,特别是在重构或者开发基于以前数据库设计的。
坏处是,用了usertype之后就依赖于hibernate,不方便移植到jpa。
现在我有这么一个需求,在UserBean有个photo,用于保存用户图片,以前都是在action处理,然后把图片的相对地址保存到user表。但现在发现都依赖于action,每处理有图片或者附件的bean时都要在action进行相应操作,所以想用hibernate usertype来处理图片或者附件上传问题。
我的FileUserType实现了UserType, ParameterizedType两个操作。在nullSafeSet方法先保存到文件系统,然后再文件相对地址插入库,在nullSafeGet根据库的相对地址实例File,然后set到UserBean。就是完成了插入和读。但现在发布更新和删除没办法在这里处理,我的更新思路是先删除文件系统的文件,然后再上传,表字段的值直接更新就行了。删除也是先删除文件系统的文件。但我发现在实现了UserType接口没有提供得知状态(插入、更新、删除)的方法,或者我现在用的还不对,现在我就想知道有没有办法在得知这些状态。暂不考虑用eventListeners。
分享到:
相关推荐
8.3 Java对象在Hibernate持久化层的状态 8.3.1 临时对象的特征 8.3.2 持久化对象的特征 8.3.3 被删除对象的特征 8.3.4 游离对象的特征 8.4 Session接口的详细用法 8.4.1 Session的save()和persist()...
- **Hibernate对象状态**: 介绍了瞬态、持久、游离等状态。 - **使对象持久**: 如何将对象变为持久状态。 - **加载一个对象**: 使用不同的方法加载持久化对象。 - **查询**: 使用HQL或其他查询语言执行复杂查询。
最后,要注意的是,Hibernate还支持自定义类型映射,通过实现`org.hibernate.usertype.UserType`接口,可以自定义任何复杂的数据类型转换。 总结来说,配置Hibernate与数据库字段的对应关系主要包括以下几个步骤: ...
第一部分 从Hibernate和EJB 3.0开始 第1章 理解对象/关系持久化 1.1 什么是持久化 1.1.1 关系数据库 1.1.2 理解SQL 1.1.3 在Java中使用SQL 1.1.4 面向对象应用程序中的持久化 1.2 范式不...
Hibernate 是一个强大的 Java 持久化框架,它简化了数据库与对象之间的交互。通过提供一组丰富的API,Hibernate使得开发者能够在应用中轻松地管理和操作数据库数据。以下是对这些API的详细解析: 1. **访问数据库...
在**描述**中提到的"可持久化层"是指Hibernate提供的一种机制,它允许Java对象在内存中的状态被持久化到关系型数据库中。这一层是应用程序与数据库之间的桥梁,使得开发者可以使用面向对象的方式来处理数据,而无需...
当需要持久化某些来自第三方库的Java类型时,如果这些类型没有提供适当的getter和setter方法,可以考虑实现`org.hibernate.UserType`接口来定义自定义类型。这样可以在不修改原有类的情况下完成持久化任务。 #### ...
通过"Hibernate3.2EnumTypeMapping-demo.zip"中的示例代码,你可以深入学习和理解这些概念,并实践在自己的项目中。这将帮助你更好地利用Hibernate处理枚举类型,提高代码质量,减少潜在的运行时错误。
2. **实现Hibernate用户类型接口**:自定义类型需要实现`org.hibernate.usertype.UserType`接口。这个接口要求我们重写一些关键方法,如`nullSafeGet()`、`nullSafeSet()`、`equals()`、`hashCode()`等,以便...
- 对于使用注解的实体类,可以使用`@Type`注解指定自定义的`UserType`,如`@Type(type = "your.package.YourCustomType")`。 5. **映射文件配置**: - 如果使用的是HBM(Hibernate Mapping)文件,需要在对应字段...
1. **hibernate-core.jar**:这是Hibernate的核心库,包含了ORM(对象关系映射)的主要功能,如实体管理、会话工厂、查询语言等。 2. **hibernate-entitymanager.jar**:这个库提供了JPA(Java Persistence API)的...
12. **实体状态管理**:区分临时态、持久态、游离态和删除态,理解它们之间的转换过程。 13. **性能优化**:包括批处理、延迟加载、缓存策略等提高Hibernate应用性能的方法。 14. ** Hibenate事件监听**:讲解如何...
Hibernate允许开发者定义自己的类型,通过实现`UserType`接口,可以处理自定义的数据类型。此外,`HibernateTypeConverter`可以用于字段在Java类型和数据库类型之间的转换。 11. **性能优化** 优化包括但不限于:...
使用自定义类型时,你需要在实体类的属性上使用`@Type`注解,指定自定义类型的实现类,使得Hibernate在操作这些属性时能够调用我们定义的转换逻辑。 例如,如果你有一个自定义日期时间类型,可以这样使用: ```java...
- **自定义数据类型**:通过实现 `org.hibernate.usertype.UserType` 接口来自定义数据类型。 通过以上内容的学习,可以全面理解 Hibernate 的基本原理和使用方法,掌握其核心概念和技术要点,从而能够有效地利用 ...
12. **状态转换**:Hibernate对象有瞬时态、持久态、游离态和删除态四种状态,理解这些状态转换对于正确使用框架至关重要。 13. **代理对象**:Hibernate在需要时会创建对象的代理,如懒加载时对关联对象的代理。 ...
"hibernate映射Oracle中LONG类型" Hibernate 框架映射 Oracle 中的 LONG 类型字段是一种复杂的技术...通过实现 UserType 接口,我们可以定制 LONG 类型字段的读写操作,并提高 Hibernate 框架的灵活性和可扩展性。
这通常通过实现`org.hibernate.usertype.UserType`接口来完成,该接口定义了将Java类型转换为数据库类型的逻辑。 以下是一些关键步骤: 1. **创建动态扩展的基类**:定义一个基类,它继承自Hibernate的`...
《Hibernate Annotations 中文文档》是针对Hibernate框架注解配置的详细指南,旨在帮助开发者更深入地理解和使用Hibernate的注解功能。Hibernate是一个流行的Java对象关系映射(ORM)框架,它允许开发人员将数据库...