Hibernate - Отображение представления с одним значением в поле только для чтения. - PullRequest
0 голосов
/ 05 мая 2011

(Hibernate 3.6, Mysql 5)

У меня есть сопоставленный класс, который называется «Программа» (работает правильно).

У меня также есть представление, которое ежедневно обновляется с помощью совокупной статистики.

Схема просмотра выглядит примерно так:

view ProgramSummary {
     long program_id
     long value
}

program_id уникален, но нет идентификатора строки. Что я хочу, так это просто извлечь значение, но я не могу понять правильную семантику.

Я попытался сопоставить отдельный статус с отношением OneToOne (и ManyToOne), но оно путается между идентификаторами. Без маркировки program_id как объекта hibernate не может обработать фактическое отображение.

Есть ли простой способ сделать это? Это поле доступно только для чтения, к которому обращается внешний процесс, и у меня нет возможности изменить схему.

Ответы [ 2 ]

1 голос
/ 06 мая 2011

Вы можете использовать формулу в файле hbm вашей Программы, чтобы отобразить это.

<property name="SummaryValue" type="long" formula="(SELECT value FROM ProgramSummary WHERE ProgramSummary.program_id = id)" />

Если ваше поле называется SummaryValue, эта строка обновит это поле в объекте Program.Любое поле, сопоставленное с формулой, не может быть обновлено.

1 голос
/ 06 мая 2011

Если вы сопоставляете вторую сущность, вы можете установить для столбцов значения updatable=false и insertable=false, делая их доступными только для чтения.

Однако, почему бы вам просто не выбрать значение из ProgramSummary, возможно, с простым SQL?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...