2008-11-20 8 views
5

У меня есть таблица в моей базе данных MYSQL, которая не имеет первичного ключа, но имеет уникальный ключ в двух столбцах. При использовании средства обратной инженерии MyEclipse Hibernate для создания сопоставления для этой таблицы он генерирует два класса: один для имени после самой таблицы и один с суффиксом «Id». Похоже, что большинство полезных методов оказались в классе Id, поэтому, похоже, это тот, который вы создадите и сохраните для сохранения данных. Я могу оценить тот факт, что класс Id создан для того, чтобы представлять уникальную строку в объекте table/mapped, но зачем использовать его для разделения на два класса, и что тогда использовать не-Id -высокий класс?Почему MyEclipse Hibernate Reverse-engineering создает несколько классов при сопоставлении определенных таблиц?

Мой коллега утверждает, что вы можете сделать то же самое только с одним классом и издеваться над использованием обратной инженерии для этих таблиц, у которых нет первичного ключа. Я, с другой стороны, полагаю, что разработчики MyEclipse намного умнее меня и что есть действительно веская причина сделать это таким образом. Здесь?

ответ

0

Вы принимаете слишком много моего друга. Эти инструменты на самом деле не принадлежат команде MyEclipse, ее из проекта Hibernate Tools (JBoss, разработчики Hibernate).

Это программный инструмент, который не может угадать все. Это довольно хорошо для простых вещей, хорошо анонированных, но иногда они не генерируют именно то, что вам нужно.

Класс id обычно должен представлять собой составной первичный ключ (ключ с несколькими атрибутами). Он использует концепцию класса Hibernate.

Также возможно немного настроить параметры генератора.

В вашем случае было бы лучше, как говорят ваши коллеги. Создайте свои собственные классы сущностей.

0

В вашем обратном файле инженер:

<table schema="public" name="yourtable"> 
      <primary-key> 
       <!-- generator may not be necessary for mysql --> 
       <generator class="increment"></generator> 
       <key-column name="column_name_of_primary_key" /> 
      </primary-key> 
     </table> 
0

У меня была аналогичная проблема работает инструмент в Затмении против Teradata экземпляра. У меня было несколько взглядов, чтобы обратить вспять, и они были в схеме. Я получал класс AcxiomDataId сгенерированного с этим:

<table catalog=".*" schema="U01TKE_GRPR_RADMT_VW" name="F_ACXM_MBR" class="AcxiomData"> 
    <primary-key> 
     <generator class="increment"></generator> 
     <key-column name="MBR_UNIQ_KEY" property="memberUniqKey" /> 
    </primary-key> 
</table> 

Но удаление схемы и каталог атрибутов из элемента таблицы, я не получил класс AcxiomDataId:

<table name="F_ACXM_MBR" class="AcxiomData"> 
    <primary-key> 
     <generator class="increment"></generator> 
     <key-column name="MBR_UNIQ_KEY" property="memberUniqKey" /> 
    </primary-key> 
</table> 

Нет идеи, почему это.

0

У меня такая же проблема. Я думаю, что когда у вас нет ключа в таблице, он генерирует два класса. В противном случае, если у вас есть ключ в таблице, он генерирует только один.

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

Старая нить, но я думал, что это полезно для кого-то.

0

Вы должны пойти в dt dt и проверить, было ли вы уже задано поле в качестве основного ключа, а затем в обратном инженерном файле спящего режима, больше не делайте несколько классов.