使用 XML 的一对多关联
这是如何使用 XML 执行一对多映射的示例。我们将以作者和书籍为例,假设作者可能已经写了很多书,但每本书只有一位作者。
作者类:
public class Author {
private int id;
private String firstName;
private String lastName;
public Author(){
}
public int getId(){
return id;
}
public void setId(int id){
this.id = id;
}
public String getFirstName(){
return firstName;
}
public void setFirstName(String firstName){
this.firstName = firstName;
}
public String getLastName(){
return lastName;
}
public void setLastName(String lastName){
this.lastName = lastName;
}
}
书类:
public class Book {
private int id;
private String isbn;
private String title;
private Author author;
private String publisher;
public Book() {
super();
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getIsbn() {
return isbn;
}
public void setIsbn(String isbn) {
this.isbn = isbn;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public Author getAuthor() {
return author;
}
public void setAuthor(Author author) {
this.author = author;
}
public String getPublisher() {
return publisher;
}
public void setPublisher(String publisher) {
this.publisher = publisher;
}
}
Author.hbm.xml:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
<class name="Author" table="author">
<meta attribute="class-description">
This class contains the author's information.
</meta>
<id name="id" type="int" column="author_id">
<generator class="native"/>
</id>
<property name="firstName" column="first_name" type="string"/>
<property name="lastName" column="last_name" type="string"/>
</class>
</hibernate-mapping>
Book.hbm.xml:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
<class name="Book" table="book_title">
<meta attribute="class-description">
This class contains the book information.
</meta>
<id name="id" type="int" column="book_id">
<generator class="native"/>
</id>
<property name="isbn" column="isbn" type="string"/>
<property name="title" column="title" type="string"/>
<many-to-one name="author" class="Author" cascade="all">
<column name="author"></column>
</many-to-one>
<property name="publisher" column="publisher" type="string"/>
</class>
</hibernate-mapping>
一对多连接的原因是 Book 类包含一个 Author,而 xml 具有<many-to-one>标记。cascade 属性允许你设置子实体的保存/更新方式。