我有两个班级:
@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”课程对表格进行更改,从而为“商店”留下这样的机会?
答案 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;
// ...
}