如何使用Hibernate映射具有多个实体的视图?
此致 chaitu
答案 0 :(得分:8)
请参阅Hibernate文档中的第5.1.3节“类”,就在“Id”部分之前:
Hibernate映射的视图和基表之间没有区别。这在数据库级别是透明的,尽管某些DBMS不能正确支持视图,尤其是对于更新。有时您希望使用视图,但不能在数据库中创建一个视图(即使用旧模式)。
http://docs.jboss.org/hibernate/core/3.5/reference/en/html/mapping.html#mapping-declaration-class
还有一个关于如何使用XML来做到这一点的例子。
答案 1 :(得分:6)
Subselect是您的自然选择。这是一个有效的例子:假设我们在DBMS中有一个名为“view1”的视图。你不需要任何其他东西,虽然如果视图不可更新,使用@Immutable会很好地解决性能问题。请注意,您的班级和视图中必须有一个id列
@Entity
@Subselect("select * from view1")
public class EventView {
@Id @GeneratedValue
private int id;
答案 2 :(得分:4)
您可以使用@subselect注释
以下是官方文档的示例:
@Entity
@Subselect("select item.name, max(bid.amount), count(*) "
+ "from item "
+ "join bid on bid.item_id = item.id "
+ "group by item.name")
@Synchronize( {"item", "bid"} ) //tables impacted
public class Summary {
@Id
public String getId() { return id; }
...
}