簡體   English   中英

hibernate如何從現有數據庫視圖中檢索數據?

[英]How hibernate retrieve data from existing database view?

我剛接觸休眠。 我的問題是我有一個Oracle數據庫。 我在數據庫中有一個視圖。 現在我想使用hibernate來檢索該視圖中的數據。 有沒有可能的解決方案?

Snippet下面可以解決您的問題,這個問題已從教程中提取:將Hibernate實體映射到視圖

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());
    } 

它與映射普通數據庫表非常相似。 創建實體並將您的視圖名稱用作表名。

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

然后以與普通表相同的方式查詢實體。 在Spring 4中使用Hibernate 4。

視圖來自訪問與表不同的數據,當您想要從視圖添加,更新或刪除時會出現問題。

請閱讀http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/querysql.html

我們可以通過在實體類中使用@ Immutable注釋來使用Hibernate映射數據庫視圖來實現這一點

例如:我創建了一個數據庫視圖user_data ,它有2列(id和name),映射的user_data視圖與數據庫表的方式相同。

@Entity
@Table(name = "user_data")
@Immutable
public class UserView {

    @Id
    @Column(name = "ID")
    private int ID ;

    @Column(name = "NAME")
    private String name ; 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM