Набор Hibernate сопоставлен с таблицей 'sql select' - PullRequest
1 голос
/ 22 июня 2009

Добрый день,

У меня есть спящий режим, который выглядит примерно так

<class name="Person">
  <id name="id" type="long" column="person_id" unsaved-value="null">
        <generator class="sequence">
            <param name="sequence">person_id_seq</param>
        </generator>
  </id>
  ...
  <set name="thinCollection" table="(select person_id, person_property from some_other_table where another_property = 'something')" fetch="subselect" lazy="false">
    <key column="person_id"/>
    <element column="person_property" type="long"/>
  </set>
  ...
</class>

Теперь моя проблема в том, что когда объект Person сбрасывается, он пытается выполнить действие удаления коллекции для Person # thinCollection, которое завершается неудачно, потому что он пытается выполнить delete from (select person_id, person_property from some_other_table where another_property = 'something').

Таким образом, в соответствии с этим, как мне остановить Hibernate от выполнения таких действий (а также обновления и вставки)?

Спасибо

Ответы [ 3 ]

1 голос
/ 22 июня 2009

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

http://docs.jboss.org/hibernate/stable/core/reference/en/html/mapping.html

0 голосов
/ 23 июня 2009

То, что я сейчас сделал, чтобы решить эту проблему, - это создание моего собственного персистера (который является подклассом BasicCollectionPersister), который никогда не выполняет вставку / обновление / удаление.

Но я не уверен, что это лучший способ сделать это или просто добавить атрибут волшебного отображения для предотвращения вставки / обновления / удаления.

[EDIT]

Мне было трудно сопоставить мой Set с подвыборкой, поэтому я использовал вместо этого свой собственный BasicCollectionPersister. Я переопределяю #isRowDeleteEnabled () и #isRowInsertEnabled (), чтобы оба всегда возвращали false. И я переопределяю #doUpdateRows (..), чтобы всегда возвращать 0.

0 голосов
/ 22 июня 2009

Не был бы

cascade="none"

Есть ли трюк ? [ПРАВИТЬ] Упс, думал, что это NHibernate: P Ну, я надеюсь, что это все еще будет работать :)

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