我正在尝试将遗留应用程序转换为休眠。
我有一个具有字段的实体,应该根据数据库中的完全限定名称字符串将其实例化为对象实例。
请考虑以下示例 - 如果我在数据库中有somePackageName.FirstClass
,则someObject
字段应为FirstClass
的实例。
我想我可以使用属性访问并持久/检索字符串,但这对我来说看起来并不优雅。
我不能使用@PostLoad
等等 - 我使用纯粹的hibernate和spring(而不是JPA) - 这些注释会被忽略。
我知道在MyBatis中可以为字段注册自定义处理程序。在Hibernate中可以有类似的东西吗?
我刚开始休眠,所以我不确定选项是什么。
@Entity
class SomePersistentClass{
private SomeInterface someObject;
}
class FirstClass implements SomeInterface{
}
class SecondClass implements SomeInterface{
}
答案 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'属性