2011-11-01 3 views
0

최대 절전 모드를 사용하여 일부 테이블을 생성하려고합니다. 나는 다음과 같은 클래스가 :최대 절전 모드를 사용하여 테이블을 생성 할 수 없습니다.

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

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

을하고 난 다음과 같은 테이블을 생성 할 :

<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> 

을하지만, 현재 최대 절전 모드입니다 다음과 같이

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

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

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

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

을 현재 Project 클래스 파일을 매핑하는 것은 내가 원하는 방식으로 테이블을 생성하지 않습니다. 지금 내가 얻는 것은 다음과 같습니다 :

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) 

아무도 도와 줄 수 있습니까?

+0

가 왜 : - (여러 엔티티 하나 이상의 테이블)

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

또 다른 기회가 여기에 자세히 설명되어 있습니다 <union-subclass>와 함께 당신의 <class>abstract 속성을 사용하는 것입니다 project_technologies에서'candidate_id'를 원하십니까? 나는'project_id'가 enouth가 될 것이라고 생각합니다. – powerMicha

답변

1

레이아웃을 제어하려는 경우 Technology 엔티티를 디자인해야합니다. 당신의 프로젝트 매핑에서

class Technology { 
    long technologyId; 
    String technologyName; 
} 

대신 <element>

편집

당신은 항상 당신이 최대 절전 모드를 사용하는 경우 고유의 실체에 대한 구체적인 클래스를 만들어야합니다의 <many-to-many> 매핑을 사용해야합니다. 상속 매핑에 대해서는 다음 문서를 참조하십시오.

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

+0

기술과 마찬가지로, 다른 필드들도 같은 구조를 가지고 있습니다. 예를 들어, 기본적으로 조직 이름 인 고객 및 고용주 목록이 있습니다. 그래서 '기술'을위한 새로운 수업을 만들어야 만한다면 고용주와 고객을위한 새로운 수업을 만들어야한다는 뜻입니까? – Shekhar

+0

물론입니다. 하지만 당신은 언제나 상속과 추상화를 DRY에 사용할 수있는 기회가 있습니다 (반복하지 마십시오) – powerMicha

+0

상속을 사용하여 구현하는 방법은 무엇입니까? 사실 저는 기술, 고객, 고용주를위한 별도의 클래스를 생성하는 것을 피하고자합니다. 단지 문자열 일 뿐이며 데이터 중복을 피하기 위해서입니다. – Shekhar

관련 문제