2010-04-01 89 views
5

更少的列我有11列的表,但我需要得到其中只有2在我的申请,我使用的是春/休眠/ DAO组合。现在我有一个包含所有11个字段的域类,以及映射表中所有11个列的映射文件。我如何使用其中的2个并非全部?掌握休眠

回答

10

或者:

  1. 用突起 - 临:没有补充 - 缺点:不是类型安全的(结果是行的List其中每行是一个Object[])

    select f.foo, f.bar from FatEntity f 
    
  2. 使用SELECT子句中的构造函数表达式(指定的类不需要是实体或映射到数据库) - Pro:类型安全解决方案 - Con:更多类,除非您在此情况下重复使用FatEntity作为所有者许多领域将是null

    select new com.acme.FatEntityDetails(f.id, f.foo, f.bar) from FatEntity f 
    

    注意,如果SELECT NEW子句中指定一个实体类的名字,结果实体实例是在状态(没有持久化标识)。

  3. 使用映射到同一个表,只有所需的字段的另一个实体 - 临:这是可以修改和更新一个真正的实体 - 缺点:更多的类。

    from LightEntity 
    

之间#2和#3的主要差别是:

  • 2不需要保持器是一个实体在所有。

  • #2中的持有者可能是映射到另一个表上的实体。
  • 如果#2返回实体,它们处于新状态(这可能是个问题,或者不是)。
+0

@帕斯卡尔Thivent我不能只留下我的领域类和映射文件中的2个字段? – 2010-04-02 08:05:47

+0

@Gandalf嗯,我以为有人在使用其他领域。如果不是这样,那么你确实可以改变你现在的实体。 – 2010-04-02 08:12:19

+0

感谢您提供多种解决方案和解释,您怎么想到的呢?的expirience?看书,培训?我会接受你的回答。如果你能指向正确的方向,那将是很棒的,比如:网站,例子,书籍。 – 2010-04-02 08:38:53

6

尝试:

SELECT myEntity.one, myEntity.two FROM MyEntity myEntity 

你甚至可以这样做:

SELECT new MyEntityDescription(myEntity.one, myEntity.two) FROM MyEntity myEntity 

得到实体描述的列表。

2

如果你从来没有需要比表中的两列以上,你可以改变你的Hibernate映射,只有那些需要2列映射到实体类。只映射要在应用程序中访问的表列。请记住,“忽略”列上的数据库约束可能会违反,如非空约束,外键或唯一约束。

+0

怎么样域类,我需要有2场在那里呢? – 2010-04-01 13:58:43