2011-01-13 35 views

risposta

5

Below Snippet può risolvere il tuo problema.

Database Query 

CREATE OR REPLACE VIEW cameron AS 
    SELECT last_name AS surname 
    FROM author 
    WHERE first_name = 'Cameron'; 

view entity 

@Entity 
@NamedNativeQuery(name = "findUniqueCameronsInOrder", query = "select * from cameron order by surname", resultClass = Cameron.class) 
public class Cameron implements java.io.Serializable { 

    private static final long serialVersionUID = 8765016103450361311L; 

    private String surname; 

    @Id 
    @Column(name = "SURNAME", nullable = false, length = 50) 
    public String getSurname() { 
     return surname; 
    } 

    public void setSurname(final String surname) { 
     this.surname = surname; 
    } 
} 

Hibernate mapping file. 

<mapping class="examples.hibernate.spring.query.domain.Cameron" /> 

finally some test !... 

@Test 
    public void findTheCameronsInTheView() throws Exception { 
     final List<Cameron> camerons = findUniqueCameronsInOrder(); 
     assertEquals(2, camerons.size()); 
     final Cameron judd = camerons.get(0); 
     final Cameron mcKenzie = camerons.get(1); 
     assertEquals("Judd", judd.getSurname()); 
     assertEquals("McKenzie", mcKenzie.getSurname()); 
    } 
+0

Tratto da [qui] (http://timezra.blogspot.de/2009/05/mapping-hibernate-entities-to-views.html) (suppongo) senza attribuzione – avalancha

2

E' molto simile alla mappatura tabella di database ordinario. Creare un'entità e utilizzare il nome della vista come nome tabella.

@Entity 
@Table(name = "rc_latest_offer_details_view") 
public class OfferLatestDetailsViewEntity { 

@Id 
@Column(name = "FK_OFFER_ID") 
private int offerId; 

@Column(name = "MAX_CHANGED_DTM") 
@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime") 
private DateTime changedDateTime; 

private BigDecimal price; 
... 
} 

Quindi interrogare per le entità come per la tabella normale. Lavorare in Hibernate 4, Primavera 4.

Problemi correlati