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

Java 如何在hibernate中从数据库中的字符串FQN实例化类?,java,hibernate,jpa,Java,Hibernate,Jpa,我正在尝试将遗留应用程序转换为hibernate 我有一个实体,它有一个字段,应该根据数据库中的完全限定名字符串将该字段实例化为对象实例 考虑下面的示例-如果数据库中有somePackageName.FirstClass,则someObject字段应该是FirstClass的实例 我想我可以使用属性访问和持久化/检索字符串,但这在我看来不是很优雅 我不能使用@PostLoad等-我使用的是纯hibernate和spring,而不是JPA-这些注释会被忽略 例如,我知道在MyBatis中可以为字段

我正在尝试将遗留应用程序转换为hibernate

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

考虑下面的示例-如果数据库中有somePackageName.FirstClass,则someObject字段应该是FirstClass的实例

我想我可以使用属性访问和持久化/检索字符串,但这在我看来不是很优雅

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

例如,我知道在MyBatis中可以为字段注册自定义处理程序。在Hibernate中会有类似的功能吗

我刚开始冬眠,所以我不确定有哪些选择

@Entity
class SomePersistentClass{
   private SomeInterface someObject; 

}

只需启用适当的Hibernate事件侦听器,就可以使用JPA特性,如@PostLoad等回调。有关详细信息,请参阅《Hibernate EntityManager指南》


但是这个更容易。这是类型在Hibernate中的角色。首先,您必须编写org.hibernate.type.type或org.hibernate.usertype.usertype的实现,并在@type type=。。。处理转换的web资源中有很多关于编写自定义Hibernate类型的内容。然后用@Type Type=your.custom.TypeImpl注释“someObject”属性。如果您使用的是@Entity,那么您就是在使用JPA。@skaffman使用JPA注释和使用JPA API是有区别的。持久性提供者只是简单地利用JPA定义的注释作为提供映射元数据的基本手段,而不是。对大多数人来说,我会说,使用JPA注释并不等于使用JPA。相反,我认为对于大多数使用JPA的开发人员来说,意味着使用JPAAPI
class FirstClass implements SomeInterface{
}
class SecondClass implements SomeInterface{
}