一 List映射
如果持久化类中具有List对象,可以通过映射文件中的类<list>元素或注解来映射List.
例如,一个问题有多个答案:
1)创建持久化类
package list;
import java.util.List;
public class Question {
private int id;
private String qname;
private List<String> answers;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getQname() {
return qname;
}
public void setQname(String qname) {
this.qname = qname;
}
public List<String> getAnswers() {
return answers;
}
public void setAnswers(List<String> answers) {
this.answers = answers;
}
}
2)创建映射文件
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="list.Question" table="quesion">
<cache usage="read-write"/>
<id name="id">
<generator class="increment"></generator>
</id>
<property name="qname"></property>
<list name="answers" table="answers">
<key column="qid"></key>
<index column="type"></index>
<element column="answer" type="string"></element>
</list>
</class>
</hibernate-mapping>
3)在全局配置文件中增加
<!-- List of XML mapping files -->
<mapping resource="list/Question.hbm.xml"/>
4)测试
package list;
import java.util.ArrayList;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class Test {
public static void main(String[] args) {
Configuration cfg = new Configuration();
cfg.configure("hibernate.cfg.xml");
SessionFactory factory = cfg.buildSessionFactory();
Session session = factory.openSession();
session.beginTransaction();
ArrayList<String> list1 = new ArrayList<String>();
list1.add("answer1");
list1.add("answer2");
Question question1 = new Question();
question1.setQname("question1");
question1.setAnswers(list1);
session.save(question1);
session.getTransaction().commit();
session.close();
//factory.close();
}
}
二 List一对多映射
一个问题有多个答案,每个答案有自己的信息,需要使用一对多关联来映射。
1)创建持久化类
package list;
import java.util.List;
public class Question {
private int id;
private String qname;
private List<Answer> answers;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getQname() {
return qname;
}
public void setQname(String qname) {
this.qname = qname;
}
public List<Answer> getAnswers() {
return answers;
}
public void setAnswers(List<Answer> answers) {
this.answers = answers;
}
}
package list;
public class Answer {
private int id;
private String answername;
private String postedBy;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getAnswername() {
return answername;
}
public void setAnswername(String answername) {
this.answername = answername;
}
public String getPostedBy() {
return postedBy;
}
public void setPostedBy(String postedBy) {
this.postedBy = postedBy;
}
}
2)配置文件
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="list.Question" table="quesion">
<cache usage="read-write"/>
<id name="id">
<generator class="increment"></generator>
</id>
<property name="qname"></property>
<list name="answers" cascade="all">
<key column="qid"></key>
<index column="type"></index>
<one-to-many class="list.Answer"/>
</list>
</class>
<class name="list.Answer" table="answers">
<cache usage="read-write"/>
<id name="id">
<generator class="increment"></generator>
</id>
<property name="answername"></property>
<property name="postedBy"></property>
</class>
</hibernate-mapping>
3)在hibernate.cfg.xml中添加配置
<!-- List of XML mapping files -->
<mapping resource="list/Question.hbm.xml"/>
4)测试
package list;
import java.util.ArrayList;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class Test {
public static void main(String[] args) {
Configuration cfg = new Configuration();
cfg.configure("hibernate.cfg.xml");
SessionFactory factory = cfg.buildSessionFactory();
Session session = factory.openSession();
session.beginTransaction();
Answer ans1 = new Answer();
ans1.setAnswername("ans1");
ans1.setPostedBy("post1");
Answer ans2 = new Answer();
ans2.setAnswername("ans2");
ans2.setPostedBy("post2");
Answer ans3 = new Answer();
ans3.setAnswername("ans3");
ans3.setPostedBy("post3");
ArrayList<Answer> list1 = new ArrayList<Answer>();
list1.add(ans1);
list1.add(ans2);
list1.add(ans3);
Question question1 = new Question();
question1.setQname("question1");
question1.setAnswers(list1);
session.save(question1);
session.getTransaction().commit();
session.close();
//factory.close();
}
}