Как hibernate получить данные из существующего представления базы данных? - PullRequest
9 голосов
/ 13 января 2011

Я новичок в спящем режиме.Моя проблема в том, что у меня есть база данных Oracle.У меня есть представление в базе данных.Теперь я хочу использовать Hibernate для получения данных в этом представлении.Есть ли возможные решения?

Ответы [ 4 ]

6 голосов
/ 13 января 2011

Ниже Snippet может решить вашу проблему, которая была извлечена из учебника: Отображение Hibernate Entities в 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());
    } 
2 голосов
/ 06 сентября 2015

Это очень похоже на отображение обычной таблицы базы данных.Создайте сущность и используйте имя представления в качестве имени таблицы.

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

2 голосов
/ 13 января 2011

Представление - это доступ к данным, ничем не отличающимся от таблицы, возникает проблема, когда вы хотите добавить, обновить или удалить представление.

Пожалуйста, прочитайте http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/querysql.html

0 голосов
/ 18 июня 2019

мы можем достичь этого, используя @ Immutable аннотацию в классе сущности для сопоставления представления базы данных с Hibernate

Например: я создал одно представление базы данных user_data , которые имеют 2 столбца (идентификатор и имя) и отображаются user_data , как таблицы базы данных.

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

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

    @Column(name = "NAME")
    private String name ; 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...