我需要重用已经映射到Hibernate实体并创建新实体的表中的某些特定字段。 我们有这样的表:
TABLE `OLDTABLE` (
/// MANY FIELDS
`aPhoneNumber` varchar(30) NOT NULL,
/// MORE FIELDS
`aActive` int(11) NOT NULL,
`aLastPaid` datetime NOT NULL,
/// EVEN MORE FIELDS
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
目前使用Hibernate管理对此的更新,无需更改该代码。 但是,出于报告目的,我们需要一个只返回一些字段的新查询,并且我们希望将另一个实体映射到这些字段。像这样:
public class NewEntity{
private String phoneNumber;
private int active;
private Date lastPaid
/// getters & setters ...
}
我们希望它易于使用,而不是将Scalars添加到当前查询中。不需要更新,只需查询。
更新:非常感谢您的回答。我们在工作中遇到了紧急情况,但我还没有尝试过。我将在下周这样做,因为我在一些紧迫的问题上不停地工作。
答案 0 :(得分:2)
您可以创建DTO而不是实体,而是使用hibernate构造函数表达式,伪示例
public class NewDTO{
private String phoneNumber;
private int active;
private Date lastPaid
public NewDTO(final String phoneNumber, int active, Date lastPaid) {
this.phoneNumber = phoneNumber;
this.active= active;
this.lastPaid= lastPaid;
}
/// getters & setters ...
}
和您的查询
select new your.package.NewDTO(e.phoneNumber, e.active, e.lastPaid) from Entity e
答案 1 :(得分:1)
创建新实体并将其映射到已映射的数据库表没有任何问题,特别是如果它是一个只读实体。