Невозможно сгенерировать таблицы, используя Hibernate - PullRequest
0 голосов
/ 01 ноября 2011

Я пытаюсь сгенерировать некоторые таблицы, используя hibernate. У меня есть следующие классы:

class Candidate {
    long candidateID;
    String candidate_name;
    List<Project> projects;
}

class Project {
    long projectID;
    Set<String> technologies;
}

и я хочу создать таблицы, как показано ниже:

+------------------------------+
      candidates
------------------------------|
candidate_id | candidate_name  
+------------------------------+

+------------------------------+
      projects 
------------------------------|
candidate_id | project_id  
+------------------------------+

+----------------------------------------+
      project_technologies 
-----------------------------------------|
candidate_id | project_id | technology_id  
+----------------------------------------+

+------------------------------+
      technologies 
-------------------------------|
technology_id | technology_name  
+------------------------------+

и текущий файл сопоставления для класса Project выглядит следующим образом:

<hibernate-mapping package="com.shekhar.tmpProject.model">
    <class name="Project" table="PROJECTS">
        <id name="projectID" column="PROJECT_ID" type="integer"
            unsaved-value="0">
            <generator class="native" />
        </id>
        <set name="technologies" table="PROJECT_TECHNOLOGIES">
            <key column="PROJECT_ID" />
            <element column="TECHNOLOGY_NAME" type="string" />
        </set>
        </class>
</hibernate_mapping>

но в настоящее время hibernate не генерирует таблицы так, как я хочу. То, что я получаю сейчас, выглядит примерно так:

mysql> desc project_technologies;
+------------+--------------+------+-----+---------+-------+
| Field      | Type         | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| PROJECT_ID | int(11)      | NO   | PRI | NULL    |       |
| TECHNOLOGY | varchar(255) | NO   | PRI | NULL    |       |
+------------+--------------+------+-----+---------+-------+
2 rows in set (0.03 sec)

mysql> desc projects;
+--------------+------------+------+-----+---------+----------------+
| Field        | Type       | Null | Key | Default | Extra          |
+--------------+------------+------+-----+---------+----------------+
| PROJECT_ID   | int(11)    | NO   | PRI | NULL    | auto_increment |
| CANDIDATE_ID | bigint(20) | YES  | MUL | NULL    |                |
+--------------+------------+------+-----+---------+----------------+
5 rows in set (0.01 sec)

mysql> desc candidates;
+----------------+--------------+------+-----+---------+----------------+
| Field          | Type         | Null | Key | Default | Extra          |
+----------------+--------------+------+-----+---------+----------------+
| CANDIDATE_ID   | bigint(20)   | NO   | PRI | NULL    | auto_increment |
| CANDIDATE_NAME | varchar(255) | NO   |     | NULL    |                |
+----------------+--------------+------+-----+---------+----------------+
2 rows in set (0.01 sec)

Может кто-нибудь помочь мне в этом?

1 Ответ

1 голос
/ 02 ноября 2011

Вам нужно будет создать объект Technology, если вы хотите контролировать его макет.

class Technology {
   long technologyId;
   String technologyName;
}

В вашем сопоставлении проекта вы должны будете использовать отображение <many-to-many> вместо <element>

РЕДАКТИРОВАТЬ

Вам всегда придется создавать конкретные классы для уникальных сущностей, если вы используете Hibernate.Для дальнейшего отображения наследования см. Следующую документацию, которая является наоборот.(Несколько объектов - одна или несколько таблиц)

http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html

Еще один шанс - использовать атрибут abstract в вашем <class> в сочетании с <union-subclass>, что подробно объясняетсяздесь:

http://docs.jboss.org/hibernate/core/3.3/reference/en/html/mapping.html#mapping-declaration-unionsubclass

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