Отображение Hibernate двух классов в одну строку в таблице - PullRequest
1 голос
/ 10 января 2012

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

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

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

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

Ответы [ 3 ]

0 голосов
/ 25 июля 2012

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

Наследование в одной таблице БЕЗ столбца дискриминатора

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

0 голосов
/ 15 сентября 2016

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

0 голосов
/ 10 января 2012

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

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

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

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