2011-02-24 61 views

回答

8

参见第5.1.3节 “类”,Hibernate文档中,前右部分 “ID”:

有一种观点和一个之间没有差别Hibernate映射的基表。这在数据库级别是透明的,尽管一些DBMS不能正确支持视图,尤其是在更新时。有时您想使用视图,但不能在数据库中创建一个视图(即使用传统模式)。

http://docs.jboss.org/hibernate/core/3.5/reference/en/html/mapping.html#mapping-declaration-class

还有如何,使用XML做榜样。

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; } 
    ... 
} 
+0

它不起作用。请参阅我的问题:http://stackoverflow.com/questions/38269722/hibernate-view-creation-wont-work – emoleumassi

5

子选择是你的自然choice.Here是一个工作示例:假设我们有一个命名视图“厂景“在DBMS中。您不需要其他任何东西,尽管如果视图不可更新,使用@Immutable对于性能问题会很好。请注意,您的班级中必须有一个ID列,并且在视图中

@Entity 
@Subselect("select * from view1") 
public class EventView { 
    @Id @GeneratedValue 
    private int id; 
+0

它不起作用。请参阅我的问题:http://stackoverflow.com/questions/38269722/hibernate-view-creation-wont-work – emoleumassi