2011-02-24 9 views

risposta

8

Vedere la sezione 5.1.3 "Class", nella documentazione di Hibernate, proprio prima della sezione "Id":

Non v'è alcuna differenza tra una visione e di una tabella di base per una mappatura Hibernate. Questo è trasparente a livello di database, sebbene alcuni DBMS non supportino le viste correttamente, specialmente con gli aggiornamenti. A volte si desidera utilizzare una vista, ma non è possibile crearne una nel database (ad esempio con uno schema precedente).

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

C'è anche un esempio su come farlo utilizzando XML.

4

si può usare un'annotazione @subselect

qui sono un esempio di documentazione ufficiale:

@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

non funziona. Per favore vedi il mio problema: http://stackoverflow.com/questions/38269722/hibernate-view-creation-wont-work – emoleumassi

5

Sottoseleziona è il vostro naturale choice.Here è un esempio di lavoro: Supponiamo di avere una visualizzazione denominata "view1 "nel DBMS. Non hai bisogno di nient'altro, anche se la vista non è aggiornabile, usare @Immutable sarebbe bello per problemi di prestazioni. Si noti che è necessario avere una colonna id nella classe e nella vista

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

non funziona. Si prega di consultare il mio problema: http://stackoverflow.com/questions/38269722/hibernate-view-creation-wont-work – emoleumassi