hibernate如何从现有数据库视图中检索数据?

时间:2011-01-13 02:16:34

标签: java hibernate

我是hibernate的新手。我的问题是我有一个Oracle数据库。我在数据库中有一个视图。现在我想使用hibernate来检索该视图中的数据。有没有可能的解决方案?

4 个答案:

答案 0 :(得分:6)

Snippet可以解决您的问题,该问题已从教程中提取:Mapping Hibernate Entities to Views

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

答案 1 :(得分:2)

视图来自访问与表格无异的数据,当您想要从视图中添加,更新或删除时会出现问题。

请阅读http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/querysql.html

答案 2 :(得分:2)

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

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

然后以与普通表相同的方式查询实体。 在Hibernate 4,Spring 4中工作。

答案 3 :(得分:0)

我们可以通过使用实体类中的 @ 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 ; 
}