Почему обратная инженерия MyEclipse Hibernate создает несколько классов при отображении определенных таблиц? - PullRequest
5 голосов
/ 20 ноября 2008

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

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

Ответы [ 5 ]

0 голосов
/ 12 ноября 2015

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

0 голосов
/ 22 апреля 2015

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

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

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

0 голосов
/ 02 июля 2009

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

   <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 голосов
/ 27 января 2012

У меня была похожая проблема при запуске инструмента в Eclipse для экземпляра 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 голосов
/ 21 ноября 2008

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

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

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

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

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

...