JPA и таблицы. Это можно сделать?

В настоящее время мы имеем систему Java EE, в которой мы сопоставляем нашу базу данных с использованием JPA. Это довольно хорошо разработанная система с примерно 20 объектами.

Теперь нам приказано использовать Views для всего. Например: если у нас есть таблица с именем PERMISSION, нам также потребуется представление PERMISSION_VIEW. В принципе, мы должны делать это для каждой таблицы, и наши приложения могут обращаться к данным только через запрос.

Теперь вся наша сущность beans выглядит так:

@Entity
@Table(name = "PERMISSION")
@NamedQueries({
        @NamedQuery(name = "Permission.findByPK", query = "SELECT p FROM Permission p WHERE p.dpNum = :dpNumber"),
        @NamedQuery(name = "Permission.deleteAll", query = "DELETE FROM Permission") })
public class Permission implements Serializable {

}
  • Во-первых, как можно обновлять таблицы, если вам разрешено использовать Views. Могут ли материализованные представления работать для этого?
  • Во-вторых, сколько потребуется переписывать, если мы можем использовать только Views? Например. Для каждого вопроса нам нужно написать @Table (name = "PERMISSION_VIEW" ), чтобы описать объект, НО, при выполнении обновления он должен сделать это в таблице PERMISSION. Как, на самом деле, вы консолидируете это в сущности bean?

Ответ 1

Подробнее о JPA и представлениях базы данных см. http://en.wikibooks.org/wiki/Java_Persistence/Advanced_Topics#Views

В JPA вы можете сопоставить с VIEW то же, что и таблица, используя аннотацию @Table. Затем вы можете сопоставить каждый столбец в представлении с атрибутами объекта. Представления обычно доступны только для чтения, поэтому сопоставление объектов с представлениями обычно также доступно только для чтения. В большинстве представлений баз данных также можно обновлять в зависимости от того, насколько сложным является запрос, который они инкапсулируют. Даже для сложных запросов триггеры базы данных обычно могут использоваться для обновления в представлении.

Ответ 2

Большинство современных RDBMS поддерживают вставные и обновляемые представления. Если ваша РСУБД поддерживает его, то у вас не должно быть никаких проблем. Вид, идентичный таблице, должен быть обновляемым в любой СУБД, поддерживающей такие представления. Поэтому вам нужно только изменить свое сопоставление и заменить имена таблиц на имена представлений.