相同的POJO,两个映射和一个表

时间:2013-01-18 14:17:20

标签: hibernate mapping pojo

我有一个Web应用程序,我正在使用Hibernate来保持数据库的持久性。这是一个简单的项目,包含一个POJO,它的Hibernate-Mapping到MySQL-Server上的表以及其他一些相关的东西。

我需要从POJO中提取不同的属性,并以特定格式将它们提供给我的用户。所以我的问题是,如何以最简单,最安全的方式做到这一点?是否可以为同一个POJO构建第二个映射文件,但只能使用相关属性,因此如果用户调用相应的方法,则只有第二个映射文件开始运行,并且只显示所选的属性,而不是每个人都显示,通过第一个和标准的映射文件映射?这似乎是合乎逻辑的,但我想知道,如果会议有任何问题吗?

或者我应该建立第二个POJO +第二个映射?但我怎么能确保在现有的一张桌子上不会有任何不一致的地方呢?

1 个答案:

答案 0 :(得分:2)

只有在应用程序的不同安装中,才能为同一个pojo创建不同的映射文件。在一个应用程序中,i。即在一个hibernate.cfg.xml文件中,一个pojo 不能多次映射。

技术原因是,Hibernate使用该类在其缓存中查找实例。如果相同的pojo被映射两次,那么它也会找到错误映射的实例。这可能会引发奇怪的结果,例如Query.uniqueResult()中的异常,即使表中只有一个条目,或者Query.list()找到了双重条目。

您可以做的是:为pojo定义一个基类(可能是一个抽象类),它具有所有公共属性,并且从不映射。然后每个用户pojo从这个基类扩展(它甚至可以是一个空的扩展,即不需要添加任何功能,正文可以为空),并为这些不同的用户pojo类创建不同的映射文件。