查看与休眠

时间:2011-02-24 22:14:26

标签: hibernate

如何使用Hibernate映射具有多个实体的视图?

此致 chaitu

3 个答案:

答案 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; }
    ...
}