Hibernate将两个类映射到表中的单个行

时间:2012-01-10 04:35:51

标签: java oracle hibernate hibernate-mapping

是否可以将两个类映射到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)
)

从STUDENT课程中映射STUDENTID和STUDENTNAME,从ADDRESS课程中映射STREET和CITY。

我目前所做的映射如下:

<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 :(得分:0)

从Java对象和数据库实体的角度来看,这是糟糕的设计。查看您的地址配置文件 - 我认为您可以看到它崩溃的地方,通过您尝试定义 id 字段来证明。始终尝试记住您要模拟的内容,在本例中为学生地址。如果这两个实体总是一对一,那么继续巩固地址和学生课程(而不是试图将它们分开)。

当然,我认为你会发现这种关系真的很多对一。如果我们在这里谈论大学而不是非常多对一。关于Vaanila的例子是有原因的结构,我建议详细研究它们:

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

答案 1 :(得分:0)

你应该可以很容易地做到这一点。以下是使用其他问题的注释的方法:

Single Table Inheritance WITHOUT Discriminator column

如果需要,你必须自己找出XML的翻译!

答案 2 :(得分:0)

是的,您可以在xml中使用组件标记。