`
biaoming
  • 浏览: 269689 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

hibernate usertype 如何得知自身实体状态

    博客分类:
  • java
阅读更多
hibernate usertype优劣网上有不少说法,下面是我的感受。
好处是能自定义符合自己的类型,特别是在重构或者开发基于以前数据库设计的。
坏处是,用了usertype之后就依赖于hibernate,不方便移植到jpa。

现在我有这么一个需求,在UserBean有个photo,用于保存用户图片,以前都是在action处理,然后把图片的相对地址保存到user表。但现在发现都依赖于action,每处理有图片或者附件的bean时都要在action进行相应操作,所以想用hibernate usertype来处理图片或者附件上传问题。
我的FileUserType实现了UserType, ParameterizedType两个操作。在nullSafeSet方法先保存到文件系统,然后再文件相对地址插入库,在nullSafeGet根据库的相对地址实例File,然后set到UserBean。就是完成了插入和读。但现在发布更新和删除没办法在这里处理,我的更新思路是先删除文件系统的文件,然后再上传,表字段的值直接更新就行了。删除也是先删除文件系统的文件。但我发现在实现了UserType接口没有提供得知状态(插入、更新、删除)的方法,或者我现在用的还不对,现在我就想知道有没有办法在得知这些状态。暂不考虑用eventListeners。
分享到:
评论
2 楼 biaoming 2008-05-07  
我也了解,确实像楼上说的。
现在我想换用jpa,因为他有个@PreRemove @PrePersist @PreUpdate @PostLoad
这几个能给我所需要的状态。但jpa又发现没有usertype,所以结合了hibernate能完成我的需求,其实我感觉这和用hibernate 监听器是一样的。只是hibernate在实体实现插入和读取,而在监听器实现更新和删除,这样破坏了实体的一致性,而用jpa+hibernate能完成了,但又依赖于hibernate,不方便移植。

我现在只是想做个类似rails file_column,大家有什么好的思路吗?
1 楼 QuakeWang 2008-05-07  
UserType无法得知状态

相关推荐

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     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()...

    hibernate4.1中文api

    - **Hibernate对象状态**: 介绍了瞬态、持久、游离等状态。 - **使对象持久**: 如何将对象变为持久状态。 - **加载一个对象**: 使用不同的方法加载持久化对象。 - **查询**: 使用HQL或其他查询语言执行复杂查询。

    Hibernate 配置跟数据库字段的对应关系

    最后,要注意的是,Hibernate还支持自定义类型映射,通过实现`org.hibernate.usertype.UserType`接口,可以自定义任何复杂的数据类型转换。 总结来说,配置Hibernate与数据库字段的对应关系主要包括以下几个步骤: ...

    Hibernate实战(第2版 中文高清版)

    第一部分 从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(api_介绍)

    Hibernate 是一个强大的 Java 持久化框架,它简化了数据库与对象之间的交互。通过提供一组丰富的API,Hibernate使得开发者能够在应用中轻松地管理和操作数据库数据。以下是对这些API的详细解析: 1. **访问数据库...

    hibernate3.2API

    在**描述**中提到的"可持久化层"是指Hibernate提供的一种机制,它允许Java对象在内存中的状态被持久化到关系型数据库中。这一层是应用程序与数据库之间的桥梁,使得开发者可以使用面向对象的方式来处理数据,而无需...

    Hibernate4实战 之第七部分

    当需要持久化某些来自第三方库的Java类型时,如果这些类型没有提供适当的getter和setter方法,可以考虑实现`org.hibernate.UserType`接口来定义自定义类型。这样可以在不修改原有类的情况下完成持久化任务。 #### ...

    Hibernate3.2EnumTypeMapping-demo.zip

    通过"Hibernate3.2EnumTypeMapping-demo.zip"中的示例代码,你可以深入学习和理解这些概念,并实践在自己的项目中。这将帮助你更好地利用Hibernate处理枚举类型,提高代码质量,减少潜在的运行时错误。

    用Hibernate实现领域对象的自定义字段

    2. **实现Hibernate用户类型接口**:自定义类型需要实现`org.hibernate.usertype.UserType`接口。这个接口要求我们重写一些关键方法,如`nullSafeGet()`、`nullSafeSet()`、`equals()`、`hashCode()`等,以便...

    mysql 让hibernate支持text字段的方言

    - 对于使用注解的实体类,可以使用`@Type`注解指定自定义的`UserType`,如`@Type(type = "your.package.YourCustomType")`。 5. **映射文件配置**: - 如果使用的是HBM(Hibernate Mapping)文件,需要在对应字段...

    hibernate需要的jar包们

    1. **hibernate-core.jar**:这是Hibernate的核心库,包含了ORM(对象关系映射)的主要功能,如实体管理、会话工厂、查询语言等。 2. **hibernate-entitymanager.jar**:这个库提供了JPA(Java Persistence API)的...

    hibernate3中文手册

    12. **实体状态管理**:区分临时态、持久态、游离态和删除态,理解它们之间的转换过程。 13. **性能优化**:包括批处理、延迟加载、缓存策略等提高Hibernate应用性能的方法。 14. ** Hibenate事件监听**:讲解如何...

    hiber开发指南 hibernate高级特性

    Hibernate允许开发者定义自己的类型,通过实现`UserType`接口,可以处理自定义的数据类型。此外,`HibernateTypeConverter`可以用于字段在Java类型和数据库类型之间的转换。 11. **性能优化** 优化包括但不限于:...

    简要分析Java的Hibernate框架中的自定义类型

    使用自定义类型时,你需要在实体类的属性上使用`@Type`注解,指定自定义类型的实现类,使得Hibernate在操作这些属性时能够调用我们定义的转换逻辑。 例如,如果你有一个自定义日期时间类型,可以这样使用: ```java...

    Hibernate API Documentation (3.2)

    12. **状态转换**:Hibernate对象有瞬时态、持久态、游离态和删除态四种状态,理解这些状态转换对于正确使用框架至关重要。 13. **代理对象**:Hibernate在需要时会创建对象的代理,如懒加载时对关联对象的代理。 ...

    hibernate映射Oracle中LONG类型

    "hibernate映射Oracle中LONG类型" Hibernate 框架映射 Oracle 中的 LONG 类型字段是一种复杂的技术...通过实现 UserType 接口,我们可以定制 LONG 类型字段的读写操作,并提高 Hibernate 框架的灵活性和可扩展性。

    动态添加hibernate domain的属性的例子

    这通常通过实现`org.hibernate.usertype.UserType`接口来完成,该接口定义了将Java类型转换为数据库类型的逻辑。 以下是一些关键步骤: 1. **创建动态扩展的基类**:定义一个基类,它继承自Hibernate的`...

    hibernate annotations 中文文档

    《Hibernate Annotations 中文文档》是针对Hibernate框架注解配置的详细指南,旨在帮助开发者更深入地理解和使用Hibernate的注解功能。Hibernate是一个流行的Java对象关系映射(ORM)框架,它允许开发人员将数据库...

Global site tag (gtag.js) - Google Analytics