2011-01-13 32 views

回答

5

下面的代码可以解决你的问题。

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

采取[这里](http://timezra.blogspot.de/2009/05/mapping-hibernate-entities-to-views.html)(我想)没有归属 – avalancha 2014-08-27 12:40:39

2

这非常类似于普通的映射数据库表。 创建实体并将您的视图名称用作表名。

@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; 
... 
} 

然后以与正常表相同的方式查询实体。 工作在休眠4,春季4.