如何在hibernate中的数据库中从字符串FQN实例化一个类?

时间:2012-05-17 13:33:55

标签: java hibernate jpa

我正在尝试将遗留应用程序转换为休眠。

我有一个具有字段的实体,应该根据数据库中的完全限定名称字符串将其实例化为对象实例。

请考虑以下示例 - 如果我在数据库中有somePackageName.FirstClass,则someObject字段应为FirstClass的实例。

我想我可以使用属性访问并持久/检索字符串,但这对我来说看起来并不优雅。

我不能使用@PostLoad等等 - 我使用纯粹的hibernate和spring(而不是JPA) - 这些注释会被忽略。

我知道在MyBatis中可以为字段注册自定义处理程序。在Hibernate中可以有类似的东西吗?

我刚开始休眠,所以我不确定选项是什么。

@Entity
class SomePersistentClass{
   private SomeInterface someObject; 

}

class FirstClass implements SomeInterface{
}

class SecondClass implements SomeInterface{
}

1 个答案:

答案 0 :(得分:0)

只需启用正确的Hibernate事件侦听器,即可使用JPA功能,如@ PostLoad等回调。有关详细信息,请查看Hibernate EntityManager指南。

但这个更容易。这是Hibernate中Type的作用。首先,您必须编写org.hibernate.type.Type或org.hibernate.usertype.UserType的实现,并在@Type(type = ...)中指定处理转换的内容(关于写入的大量Web资源)自定义Hibernate类型)。然后用@Type(type =“your.custom.TypeImpl”)注释你的'someObject'属性