在hibernate中设置自定义地图

时间:2011-10-26 13:55:29

标签: hibernate

我在我正在修改的系统中有两个表,data,data_modified。我最终需要的是一个看起来像这样的课程

compareClass{
  field1 = data
  field2 = data_modified where id=data.id

}

在data_modified表中为每个记录创建一个类。

我可以像这样的单个查询做类似的

select * from data2009.data s, data2009.data_modified m where m."original_data_id" = s."id"

但正如我所说,我希望它返回上面的类对象,而不是上面的查询生成的结果集。

有人可以指出我正确的方向来完成这个hibernate映射吗

2 个答案:

答案 0 :(得分:0)

您可以使用hibernate中的Transformers从查询结果中创建自定义DTO。有关示例,请参阅here

答案 1 :(得分:0)

编写并执行一个查询,该查询返回所有修改过的数据及其原始数据:

Query q = session.createQuery("select m from ModifiedData m"
                             + " inner join fetch m.originalData");
List<ModifiedData> list = q.list();

然后迭代返回的列表,并为每个结果构建一个Comparison实例:

List<Comparison> result = new ArrayList<Comparison>(list.size());
for (ModifiedData m : list) {
    result.add(new Comparison(m, m.getOriginalData()));
}

请注意,由于ModifiedData实例已经拥有其原始数据实例,因此Comparison类实际上并不实用。您可以直接返回ModifiedData列表。