2012-01-10 2 views
1

Можно отобразить два классов в одну строку в таблице в HibernateHibernate отображение двух классов в одной строке в таблице

У меня есть два класса:

public class Student implements java.io.Serializable { 
private int studentId; 
private String studentName; 

public Student() { 
} 
public int getStudentId() { 
    return this.studentId; 
} 

public void setStudentId(int studentId) { 
    this.studentId = studentId; 
} 

public String getStudentName() { 
    return this.studentName; 
} 

public void setStudentName(String studentName) { 
    this.studentName = studentName; 
} 
} 

и:

public class Address implements java.io.Serializable { 

private String street; 
private String city; 

public Address() { 
} 

public String getStreet() { 
    return street; 
} 

public void setStreet(String street) { 
    this.street = street; 
} 

public String getCity() { 
    return city; 
} 

public void setCity(String city) { 
    this.city = city; 
} 

Я хотел бы создать таблицу:

CREATE TABLE "STUDENT" 
("STUDENTID" NUMBER(10,0) PRIMARY KEY, 
"STUDENTNAME" VARCHAR2(250), 
"STREET" VARCHAR2(250), 
"CITY" VARCHAR2(250) 
) 

и на карте STUDENTID и STUDENTNAME из класса STUDENT и STREET and CITY из класса ADDRESS.

Отображения я сделал в настоящее время является следующее:

<hibernate-mapping> 
<class name="com.vaannila.student.Address" table="STUDENT"> 
<id> 
<generator class="assigned"/> 
</id> 
<property name="street" column="SREET" type="string" length="250"/> 
<property name="city" column="CITY" type="string" length="250"/> 
</class> 
</hibernate-mapping> 

и:

<hibernate-mapping> 
<class name="com.vaannila.student.Student" table="STUDENT"> 
<id name="studentId" column="STUDENTID" type="int"/> 
<property name="studentName" column="STUDENTNAME" type="string" length="250"/> 
</class> 
</hibernate-mapping> 

Я получаю сообщение об ошибке:

Caused by: org.hibernate.InvalidMappingException: Could not parse mapping document from resource com/vaannila/student/Address.hbm.xml 
Caused by: org.hibernate.MappingException: must specify an identifier type: com.vaannila.student.Address 

Пожалуйста, помогите

+0

hibernate попробовать с аннотациями, его гораздо проще, чем это ... – Kushan

+0

аннотации более тесно связаны? Вот почему я думал об использовании файлов mapping.xml. Исправьте меня, если я ошибаюсь –

+0

@ user864624: да, имея конфигурацию в xml, приложение hibernate меньше связано с конфигурацией в виде аннотаций. Например, изменение имени столбца проще сделать в xml, чем в java-файле в виде аннотации. Файл java необходимо перекомпилировать для изменения. – Gaurav

ответ

0

Это плохо дизайн, от bo й объект Java и точка сущности базы данных. Посмотрите на свой конфигурационный файл адреса - я думаю, вы можете видеть, где он разваливается, о чем свидетельствует ваша попытка определить поле id. Всегда старайтесь и помните, что вы пытаетесь моделировать, в данном случае Студенты и Адреса. Если эти две сущности всегда будут взаимно однозначными, то продолжайте и консолидируйте классы Address и Student (в отличие от попыток разделить их).

Конечно, я думаю, вы обнаружите, что отношения действительно много-к-одному. И если мы говорим об колледже здесь, чем о «Очень-много-к-одному». Примеры на Vaanila структурированы таким образом по причине, я рекомендую изучать их в деталях:

http://www.vaannila.com/hibernate/hibernate-example/hibernate-mapping-many-to-one-1.html

+0

Спасибо за ответ. –

+0

Я объясню реальный сценарий, с которым я столкнулся.Я удаляю службу, которая даст ответ xml, который отображается на объект jaxb. Этот xml имеет несколько сокращений в верхней части и соответствующее расширение в наборе меток внизу. Я хотел бы добавить abbrv в таблицу вместе с расширением подряд. Поэтому мне нужно сопоставить два объекта в одной строке. –

+0

@sonic - У вас есть контроль над веб-сервисом и кодом базы данных? Я бы рекомендовал иметь один набор объектов модели для взаимодействия с JAXB и взаимодействия с БД. Вы можете сопоставить несколько объектов JAXB на одном объекте БД. – Perception

0

Вы должны быть в состоянии сделать это довольно легко. Вот как с помощью аннотаций из другого вопроса:

Single Table Inheritance WITHOUT Discriminator column

Вы должны будете выяснить перевод на XML по своему усмотрению, если это желательно!

0

да его возможно можно использовать компонент тег в xml.

Смежные вопросы