是否可以在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
请帮助
从Java对象和数据库实体的角度来看,这是一个糟糕的设计。看看你的地址配置文件——我想你可以看到它在哪里崩溃了,你试图定义一个id字段就证明了这一点。请始终记住您试图建模的内容,在这种情况下,学生和地址。如果这两个实体总是一对一的,那么继续合并Address和Student类(而不是试图将它们分开)。
当然,我想你会发现这种关系真的是多对一的。如果我们在这里谈论的是大学,那么它是"非常多对一"。Vaanila上的例子是这样构造的,这是有原因的,我建议详细研究它们:
http://www.vaannila.com/hibernate/hibernate-example/hibernate-mapping-many-to-one-1.html
您应该能够很容易地做到这一点。以下是如何使用另一个问题的注释:
单表继承WITH鉴别器列
如果需要的话,您必须自己找到XML的翻译!
是的,您可以在xml中使用组件标记。