ssh中junit 测试 hibernate 1对多单向关联(不推荐使用这种关联)

主要介绍效率最低的一对多单向关联(实际中推荐使用一对多双向关联)。下面是实例:
实例的两个实体是:钱包、钱 。此两个实体关系是一对多:
1,Money实体:该实体对应的是“多”的一端,在一对多单向关联中不维护关系。
package com.dd.domain;
public class Money {
private int id;
private int miane;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getMiane() {
return miane;
}
public void setMiane(int miane) {
this.miane = miane;
}
}

2,Money的配置文件
<?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="com.dd.domain">
<!-- class元素是指定的类与表的对应关系 一对一的关系-->
<class name="Money" table="money">
<id name="id" type="integer" column="id">
<generator class="native" />
</id>
<property name="miane"/>
</class>
</hibernate-mapping>

3,QianBao实体类:在一对多单向关联中充当“一”的一端,其维护关联关系。
package com.dd.domain;
import java.util.HashSet;
import java.util.Set;
public class QianBao {
private int id;
private String name;
private Set<Money> moneys = new HashSet<Money>();
//该set属性起到维护关系的作用
public Set<Money> getMoneys() {
return moneys;
}
public void setMoneys(Set<Money> moneys) {
this.moneys = moneys;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

4,QianBao的配置文件
<?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="com.dd.domain">
<!-- class元素是指定的类与表的对应关系 一对一的关系-->
<class name="QianBao" table="qianbao">
<id name="id" type="integer" column="id">
<generator class="native" />
</id>
<property name="name"/>
<set name="moneys">
<key column="qianbao_id"></key>
<one-to-many class="Money"/>
</set>
</class>
</hibernate-mapping>

5,测试类:需要Junit框架的jar包。
package com.dd.test;
import junit.framework.TestCase;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.classic.Session;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.dd.domain.Money;
import com.dd.domain.QianBao;
public class HibernateTest extends TestCase {
ApplicationContext act = new ClassPathXmlApplicationContext("applicationContext.xml");
SessionFactory sessionFactory = act.getBean("sessionFactory",SessionFactory.class);
public void testOne2ManySingle2(){
Session session = sessionFactory.openSession();
Transaction at = session.beginTransaction();

Money money1 = new Money();
money1.setMiane(5);
session.save(money1);

Money money2 = new Money();
money2.setMiane(5);
session.save(money2);

QianBao qianbao = new QianBao();
qianbao.setName("啄木鸟");
qianbao.getMoneys().add(money1);
qianbao.getMoneys().add(money2);
session.save(qianbao);

at.commit();
session.close();
}
}


6,hibernate执行时发送的sql语句:
Hibernate: 
select
hibernate_sequence.nextval
from
dual
Hibernate:
select
hibernate_sequence.nextval
from
dual
Hibernate:
select
hibernate_sequence.nextval
from
dual
Hibernate:
insert
into
money
(miane, id)
values
(?, ?)
Hibernate:
insert
into
money
(miane, id)
values
(?, ?)
Hibernate:
insert
into
qianbao
(name, id)
values
(?, ?)
Hibernate:
update
money
set
qianbao_id=?
where
id=?
Hibernate:
update
money
set
qianbao_id=?
where
id=?

正因为每次插入都需要update,所以效率最底下。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值