Hibernate 相同的POJO、两个映射和一个表

Hibernate 相同的POJO、两个映射和一个表,hibernate,mapping,pojo,Hibernate,Mapping,Pojo,我有一个web应用程序,其中我使用Hibernate来持久化我的数据库。这是一个简单的项目,有一个POJO,它的Hibernate映射到MySQL服务器上的一个表,以及一些其他相关的东西 我需要从POJO中提取不同的属性,并以特定的格式将它们提供给我的用户。所以我的问题是,如何做到这一点最简单和最安全的方式?是否可以为同一POJO构建第二个映射文件,但仅使用相对属性,因此,如果用户调用相应的方法,则只有第二个映射文件发挥作用,并且仅显示所选属性,而不是通过第一个和标准映射文件映射的所有属性?这似

我有一个web应用程序,其中我使用Hibernate来持久化我的数据库。这是一个简单的项目,有一个POJO,它的Hibernate映射到MySQL服务器上的一个表,以及一些其他相关的东西

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


或者我应该只构建第二个POJO+第二个映射?但是,我如何才能确保只有一个现有表不会出现任何不一致的情况呢?

对于同一个pojo,您只能在应用程序的不同安装中使用不同的映射文件。在一个应用程序中,i。E在一个hibernate.cfg.xml文件中,一个pojo不能映射多次

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


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

谢谢,我将尝试一下。但是,当我访问表时,如何区分这两个映射呢?我可能应该构建不同的方法,然后为特定映射打开一个新会话,对吗?因为我的唯一pojo只有一个映射,所以在会话方面我从来没有遇到过问题。这些方法始终访问唯一表上的唯一pojo。您只需要一个会话。您有两个类,让它们调用
Cl1
Cl2
,这两个类都扩展了基类
类Cl1扩展了基类{}
,而
类Cl2扩展了基类{}
。然后有一个映射用于
Cl1
,另一个映射用于
Cl2
。在HQL语句中,您可以通过从正确的类中选择映射,或者从Cl1 where…选择
,或者从Cl2 where…
选择
。这可以在同一个会话中完成。