Отображение коллекции только для чтения в спящем режиме - PullRequest
0 голосов
/ 01 августа 2011

Я беру следующий пример сопоставления "многие ко многим" из этого Шпаргала по отображению Hibernate :

<class name="Foo" table="foo">
  ...
  <set role="bars" table="foo_bar">
     <key column="foo_id"/>
     <many-to-many column="bar_id" class="Bar"/>
  </set>
</class>

<class name="Bar" table="bar">
  ...
  <set role="foos" table="foo_bar" readonly="true">
    <key column="bar_id"/>
    <many-to-many column="foo_id" class="Foo"/>
  </set>
</class>

У Foo есть несколько bars, а бар имеет несколько foos.Поскольку Bar.foos объявлен только для чтения , я думаю, что мне просто нужен этот простой метод:

public class Foo {
    public void addBar(Bar bar) {
        this.bars.add(bar);
    }
}

И не :

public class Foo {
    public void addBar(Bar bar) {
        this.bars.add(bar);
        bar.foos.add(foo); // readonly
    }
}

Я предполагаю, что я не могу обеспечить согласованность таким образом (добавив обратно Foo к Bar).Гарантирует ли Hibernate такую ​​согласованность, автоматически обновляя Bar.foos всякий раз, когда я добавляю Foo.bars, или статическая коллекция Bar.foos после инициализации?

Например, если я делаю это:

Foo foo = new Foo();
Bar bar = new Bar();

bar.getFoos().size(); // expected to return 0
foo.addBar(bar);
bar.getFoos().size(); // expected to return 1

Будут ли возвращаемые значения size() ожидаемыми?

Я не смог найти соответствующую документацию, поэтому указатель был бы очень полезен.

1 Ответ

0 голосов
/ 30 августа 2011

Одна из ссылок должна быть помечена inverse="true", не только для чтения.

Обратная часть не хранится в NH. Но, конечно, у вас возникают проблемы с согласованностью в памяти при работе с этими объектами.

Взгляните на справочную документацию, Двунаправленные ассоциации с таблицами соединений, многие-ко-многим

...