Основной вопрос настройки Hibernate: почему это приводит к миллиону нулевых объектов? - PullRequest
0 голосов
/ 12 октября 2010

У меня есть две таблицы: foo (первичный ключ: foo_id) и foo_entry (первичный ключ: foo_entry_id; внешний ключ: foo_id).

Ниже мой конфиг Hibernate.
Моя проблема в том, что когда я вызываю getAttributes () для класса FooModel, я получаю список из чуть более миллиона нулевых объектов. (в таблице foo ~ 200 строк, в foo_entry ~ 10000).

Я новичок в Hibernate и подозреваю, что просто упускаю из виду или просто не понимаю чего-то очень простого. Любая помощь приветствуется!

<hibernate-mapping package="com.blah.www">
  <class name="FooModel" table="foo">
    <id name="fooId" column="foo_id"></id>

    <list name="attributes" table="foo_entry">
      <key column="foo_id" />
      <index column="entry_id" />
      <one-to-many class="FooEntryModel" />
    </list>
  </class>
</hibernate-mapping>

<hibernate-mapping package="com.blah.www">
  <class name="FooEntryModel" table="foo_entry">
    <id name="fooEntryId" column="foo_entry_id">
      <generator class="native" />
    </id>

    <property name="fooId"      type="int"       column="foo_id"      /> 
    <property name="attrName"   type="string"    column="attr_name"   />
    <property name="attrValue"  type="string"    column="attr_value"  />
    <property name="startDate"  type="timestamp" column="start_date"  /> 
    <property name="endDate"    type="timestamp" column="end_date"    />
  </class> 
</hibernate-mapping>

Ответы [ 3 ]

2 голосов
/ 12 октября 2010

Первый шаг к отладке - увидеть в журналах запрос, сгенерированный для вас в Hibernate. Тем не менее, я предлагаю вам попробовать это,

<list name="attributes">
  <key column="foo_id" />
  <one-to-many class="FooEntryModel" />
</list>

2 голосов
/ 12 октября 2010

Цифры означают, что вы получаете декартово соединение. У вас есть FK, настроенный в базе данных?

в сторону - я использовал Hibernate в течение года и никогда не кодировал модель, наполненную атрибутами, или один из таких файлов, как ваше шоу. Мы всегда перепроектировали базу данных.

0 голосов
/ 27 октября 2010

Вздох ...

Это оказалось очень логичным (и очень тонким) объяснением.Я неправильно понял и угнал семантику (также известный как) в пределах .А именно, учитывая:

<list name="attributes">
    <key column="foo_id" />
    <index column="some_integer_value" />
    <one-to-many class="FooEntryModel" />
</list>

... Я думал, имел в виду атрибут, по которому вы хотите упорядочить список.Фактически, это относится к атрибуту, значение которого обозначает позицию индекса в списке для вставки всего объекта.Это должен быть атрибут-заполнитель, который поддерживается и полностью используется Hibernate.

Значение «some_integer_value», которому я отображал, варьировалось в моих тестовых данных.Иногда значение было меньше 100. Иногда оно превышало миллион.

Таким образом, при отображении только одной строки, где "some_integer_value" == например, 100,001, Hibernate создаст список с этим объектом, вставленным в100,001-я позиция.Каждый член списка, предшествующий ему, естественно, будет нулевым.

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