有3个数据库表,表user(id,name)为用户信息表,表addresses(id,addr)为用户地址表,表user_addr(id,user_id,addr_id),为user和addresses的对应关系表,一个用户可能有多个地址。现在我想一次把所有的用户及其地址关系取出,请问映射关系的配置文件应该怎么写,谢谢
解决方案 »
- 带有日志的server.xml的配置问题
- weblogic懒汉模式远程调用ejb???
- JSTL标签(Missing end tag "c:forEach" Missing end tag "c:if" )
- CSDN 快速搜索
- 显示 问题
- 刚学JBoss,第一个例子就出错,不知道怎么办?
- 想跳槽了,很是茫然。大家给点建议吧!
- 郁闷啊,把同事的机器也搞的不能用了,达人救我
- 多谢CsnowerS (云)给我的j2ee资料,给100分!!
- cas4.2.0限制用户登录错误次数及登录登出日志!急!急!急!
- 我想做一个筛选这个hql语句该怎么写啊``大家帮忙拉```
- ssh问题,急!!!!!!!!!!!!!!!!
一般我在使用的时候都会生成一个第三张表的POJO类,然后分别使用one to many的关系去映射.
给你个例子:
hibernate.cfg.xml文件如下:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration>
<session-factory>
<property name="connection.username">sa</property>
<property name="connection.url">jdbc:microsoft:sqlserver://localhost:1433;databaseName=ORTemp</property>
<property name="dialect">org.hibernate.dialect.SQLServerDialect</property>
<property name="connection.password">810424</property>
<property name="connection.driver_class">com.microsoft.jdbc.sqlserver.SQLServerDriver</property>
<mapping resource="org/Miao/Bean/PeopleBean.hbm.xml" />
<mapping resource="org/Miao/Bean/ComputerBean.hbm.xml" />
</session-factory>
</hibernate-configuration>
然后定义持久化类ComputerBean和PeopleBean。
ComputerBean.class
package org.Miao.Bean;
public class ComputerBean {
private String id;//COMPUTERTABLE.CID
private String model;//COMPUTERTABLE.CMODEL
private PeopleBean people;//PEOPLETABLE表
public String getId() {
return id;
}
public String getModel() {
return model;
}
public PeopleBean getPeople() {
return people;
}
public void setId(String id) {
this.id = id;
}
public void setModel(String model) {
this.model = model;
}
public void setPeople(PeopleBean people) {
this.people = people;
}
}PeopleBean.class
package org.Miao.Bean;
public class PeopleBean {
private String id;// PEOPLETABLE.PID
private String name;// PEOPLETABLE.PNAME
public String getId() {
return id;
}
public String getName() {
return name;
}
public void setId(String id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
}
然后是二者的配置文件:
PeopleBean.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="org.Miao.Bean">
<class name="PeopleBean" table="PEOPLETABLE">
<id name="id" column="PID">
<generator class="native"></generator>
</id>
<property name="name" column="PNAME"></property>
</class>
</hibernate-mapping>ComputerBean.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="org.Miao.Bean">
<class name="ComputerBean" table="COMPUTERTABLE">
<id name="id" column="CID">
<generator class="native"></generator>
</id>
<property name="model" column="CMODEL"></property>
<many-to-one name="people" column="PEOPLE" class="PeopleBean" insert="true" update="true"></many-to-one>
</class>
</hibernate-mapping>最后是例子程序主类ORTemp.java
内容如下:
package org.Miao;import java.util.List;import org.Miao.Bean.ComputerBean;
import org.Miao.Bean.PeopleBean;
import org.hibernate.Session;
import org.hibernate.Transaction;public class ORTemp { /**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成方法存根
Session session=HibernateSessionFactory.currentSession();
//查询存在的纪录
List l;
l=session.createQuery("from ComputerBean").list();
System.out.printf("存在的纪录数量:%s\n",l.size());
//把一个纪录打出来
ComputerBean computer=(ComputerBean)l.get(0);
System.out.printf("id:%s,model:%s,people:%s\n",computer.getId(),computer.getModel(),computer.getPeople().getName());
//添一个新纪录
Transaction t=session.beginTransaction();
computer=new ComputerBean();
computer.setModel("联想天逸");
//取出一个已经存在的PEOPLETABLE表纪录
PeopleBean people=(PeopleBean)session.load(PeopleBean.class,"1");
computer.setPeople(people);
session.save(computer);
session.flush();
t.commit();
//保存完成,现在看看有几条纪录
l=session.createQuery("from ComputerBean").list();
System.out.printf("插入后存在的纪录数量:%s\n",l.size());
//打印所有纪录
for(int i=0;i<l.size();i++){
ComputerBean tmp=(ComputerBean)l.get(i);
System.out.printf("id:%s,model:%s,people:%s\n",tmp.getId(),tmp.getModel(),tmp.getPeople().getName());
}
session.close();
}}