将两个类映射到hibernate中的表,而不将字段插入表

时间:2015-04-05 21:46:21

标签: java hibernate jpa

我有两个班级:

@Entity
@Table(name="shops")
public class Shops {
    private Integer id;
    private String name;
    // ...
}

@Entity
public class ShopsPlus extends Shops {
    public Double latitude;
    public Double longitude;
    // ...
}

类'商店'用于反映'商店'表(普通实体)。 第二个类('ShopsPlus')包括几个附加字段,这些字段在第一个类中不存在,用于从计算字段的查询中获取结果。

示例:

Query query = session.createSQLQuery("SELECT shops.id, shops.name
                                      COS(?) AS latitude,  /*example*/
                                      SIN(?) AS longitude  /*example*/
                                      FROM shops
                                      WHERE localities.name = ? 
                                      AND localities.id = shops.locality_id;")
               .addEntity(ShopsPlus.class)
               .setString(0, a.toString())
               .setString(1, a.toString())
               .setString(2, cityName);
List<Shops> shops = query.list();

之后表中有三个多余的字段:'纬度','经度'和'DTYPE'。

如何禁止“ShopsPlus”课程对表格进行更改,从而为“商店”留下这样的机会?

2 个答案:

答案 0 :(得分:0)

由于您使用了Hibernate,因此可以使用ShopsPlus注释@org.hibernate.annotations.Immutable

我不知道是否有JPA标准方法将实体标记为只读/不可变,但是,例如,EclipseLink为此目的有@ReadOnly

答案 1 :(得分:0)

我认为这对你有用。只需为列定义可插入和可更新:

@Entity
public class ShopsPlus extends Shops {

    @Column(insertable = false, updatable = false)
    public Double latitude;

    @Column(insertable = false, updatable = false)
    public Double longitude;
    // ...
}

@Entity
@Table(name="shops")
public class Shops {
    private Integer id;
    private String name;

    @Column(insertable = true, updatable = true)
    public Double latitude;

    @Column(insertable = true, updatable = true)
    public Double longitude;
    // ...
}