您的位置:首页 > 其它

hibernate多对一或一对多映射——单向

2016-04-01 20:48 645 查看
单向一对多关联映射

单向多对一关联映射

单向一对多关联映射,在对象关系映射文件中使用<one-to-many>标签映射,开发中不常见。



由于关系模型中不存在set这样的集合,使得关系模型和对象模型是不一样的。

javabean如下:

/**
*
* 单向的一对多
* 少的一端,需要对多的一端进行集合的引用
*/
public class Account {

private int id;
private String accName;

//对多端对象集合的引用
private Set<Orders> setOrders;

public Account(){

}

/**
* @return the id
*/
public int getId() {
return id;
}

/**
* @param id the id to set
*/
public void setId(int id) {
this.id = id;
}

/**
* @return the accName
*/
public String getAccName() {
return accName;
}

/**
* @param accName the accName to set
*/
public void setAccName(String accName) {
this.accName = accName;
}

/**
* @return the setOrders
*/
public Set<Orders> getSetOrders() {
return setOrders;
}

/**
* @param setOrders the setOrders to set
*/
public void setSetOrders(Set<Orders> setOrders) {
this.setOrders = setOrders;
}

}


/**
* @author
* 单向的一对多,多的一段
*/
public class Orders {

private int id;
private String orderNum;
private Date orderTime;

public Orders(){

}

/**
* @return the id
*/
public int getId() {
return id;
}

/**
* @param id the id to set
*/
public void setId(int id) {
this.id = id;
}

/**
* @return the orderNum
*/
public String getOrderNum() {
return orderNum;
}

/**
* @param orderNum the orderNum to set
*/
public void setOrderNum(String orderNum) {
this.orderNum = orderNum;
}

/**
* @return the orderTime
*/
public Date getOrderTime() {
return orderTime;
}

/**
* @param orderTime the orderTime to set
*/
public void setOrderTime(Date orderTime) {
this.orderTime = orderTime;
}

}


映射文件:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- name属性指定类名(全限定名) table指明表名,不指明table数据默认的表名和实体名一致 -->
<class name="com.entity.Account" table="acc_tab">
<!-- type指明当前字段的类型    name对应实体中的属性名 -->
<id type="integer" name="id">
<!-- 提供ID自增的策略  native会根据数据库自行判断 -->
<generator class="native"/>
</id>
<property name="accName" type="string"></property>
<set name="setOrders">
<key column="acc_id"></key>

<one-to-many class="com.entity.Orders"/>
</set>

</class>
</hibernate-mapping>


<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- name属性指定类名(全限定名) table指明表名,不指明table数据默认的表名和实体名一致 -->
<class name="com.entity.Orders" table="order_tab">
<!-- type指明当前字段的类型    name对应实体中的属性名 -->
<id type="integer" name="id">
<!-- 提供ID自增的策略  native会根据数据库自行判断 -->
<generator class="native"/>
</id>
<property name="orderNum" type="string"></property>
<property name="orderTime" type="timestamp"></property>
</class>
</hibernate-mapping>


数据库表及外键的引用图:





单向的多对一:

单向多对一关联中对象模型中类之间的引用在关系模型中表示为表之间的外键引用,通过<many-to-one>标签映射多对一关联。



javabean如下:

/**
*
*  单向的多对一
*  少的一端
*/
public class Dept {

private int id;
private String deptName;

public Dept(){

}

/**
* @return the id
*/
public int getId() {
return id;
}

/**
* @param id the id to set
*/
public void setId(int id) {
this.id = id;
}

/**
* @return the deptName
*/
public String getDeptName() {
return deptName;
}

/**
* @param deptName the deptName to set
*/
public void setDeptName(String deptName) {
this.deptName = deptName;
}

}


/**
*
* Many to One
* 多的一端
*/
public class Employee {

private int id;
private String empName;
private Date hiredate;
//对一端的引用
private Dept dept;

public Employee(){

}

/**
* @return the id
*/
public int getId() {
return id;
}

/**
* @param id the id to set
*/
public void setId(int id) {
this.id = id;
}

/**
* @return the empName
*/
public String getEmpName() {
return empName;
}

/**
* @param empName the empName to set
*/
public void setEmpName(String empName) {
this.empName = empName;
}

/**
* @return the hiredate
*/
public Date getHiredate() {
return hiredate;
}

/**
* @param hiredate the hiredate to set
*/
public void setHiredate(Date hiredate) {
this.hiredate = hiredate;
}

/**
* @return the dept
*/
public Dept getDept() {
return dept;
}

/**
* @param dept the dept to set
*/
public void setDept(Dept dept) {
this.dept = dept;
}

}


映射文件:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- name属性指定类名(全限定名) table指明表名,不指明table数据默认的表名和实体名一致 -->
<class name="com.entity.Dept" table="dept_tab">
<!-- type指明当前字段的类型    name对应实体中的属性名 -->
<id type="integer" name="id">
<!-- 提供ID自增的策略  native会根据数据库自行判断 -->
<generator class="native"/>
</id>
<property name="deptName" type="string"></property>

</class>
</hibernate-mapping>


<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- name属性指定类名(全限定名) table指明表名,不指明table数据默认的表名和实体名一致 -->
<class name="com.entity.Employee" table="emp_tab">
<!-- type指明当前字段的类型    name对应实体中的属性名 -->
<id type="integer" name="id">
<!-- 提供ID自增的策略  native会根据数据库自行判断 -->
<generator class="native"/>
</id>
<property name="empName" type="string"></property>
<property name="hiredate" type="timestamp"></property>

<many-to-one name="dept" column="dept_id"></many-to-one>

</class>
</hibernate-mapping>


对应的数据库表:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: