在新实体上重用Hibernate中的特定字段

时间:2015-02-27 12:40:03

标签: java hibernate

我需要重用已经映射到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添加到当前查询中。不需要更新,只需查询。

P.S。我对Hibernate相当新,但我掌握了大部分基础知识。

更新:非常感谢您的回答。我们在工作中遇到了紧急情况,但我还没有尝试过。我将在下周这样做,因为我在一些紧迫的问题上不停地工作。

2 个答案:

答案 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)

创建新实体并将其映射到已映射的数据库表没有任何问题,特别是如果它是一个只读实体。