hibernate一对多单向关联
2016-07-23 18:21
471 查看
hibernate一对多单向关联
配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 数据库驱动 -->
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<!-- 链接数据库的url -->
<property name="connection.url">
jdbc:mysql://localhost:3306/test
</property>
<!-- 数据库链接用户名 -->
<property name="connection.username">用户名</property>
<!-- 数据库链接密码 -->
<property name="connection.password">密码</property>
<!-- sql方言 -->
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<!-- 是否打印sql语句 -->
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="hbm2ddl.auto">update</property>
<mapping class="hibernate.onetomany.A" />
<mapping class="hibernate.onetomany.B" />
</session-factory>
</hibernate-configuration>
测试方法
import java.io.Serializable; import java.util.List; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.OneToMany; import javax.persistence.Table; /*一对多单向关联,A和B * A是主表,是1的一方,joinclumn设置在A的实体中 * B是从表,是多的一方 * * ·只有一个注解的话,在这个注解下加@Joincolumn,这个会在从表中增加字段 * ·mappedy存在则不存在中间表,只有双向的时候涉及,搭配@Joincolumn,这两个字段在不同的表中 * (1)ManyToOne(多对一)单向:不产生中间表,但可以用@Joincolumn(name=" ")来指定生成外键的名字,外键在多的一方表中产生! * (2)OneToMany(一对多)单向:会产生中间表,此时可以用@onetoMany @Joincolumn(name=" ")避免产生中间表,并且指定了外键的名字(别看@joincolumn在一中写着,但它存在在多的那个表中) * (3)OneToMany ,ManyToOne 双向(两个注解一起用的):如果不在@OneToMany中加mappedy属性就会产生中间表,此时通常在@ManyToOne的注解下再添上注解@Joincolumn(name=" ")来指定外键的名字(说明:多的一方为关系维护端,关系维护端负责外键记录的更新,关系被维护端没有权利更新外键记录)! * */ @Table(name="AT") @Entity(name="AT") @SuppressWarnings("serial") public class A implements Serializable { private String An; private List<B> Lb; /** * @return the an */ @Id @Column(name="AN",unique=true,length=32) public String getAn() { return An; } /** * @param an the an to set */ public void setAn(String an) { An = an; } /** * @return the lb */ @OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER) @JoinColumn(name="Aid") //指定了从表中的外键ID,如果没有这一句,会自动生成关联表 public List<B> getLb() { return Lb; } /** * @param lb the lb to set */ public void setLb(List<B> lb) { Lb = lb; } }
import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; @Table(name="BT") @Entity(name="BT") @SuppressWarnings("serial") public class B implements Serializable { private String bn; /** * @return the bn */ @Id @Column(name="BN",unique=true,length=32) public String getBn() { return bn; } /** * @param bn the bn to set */ public void setBn(String bn) { this.bn = bn; } }
配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 数据库驱动 -->
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<!-- 链接数据库的url -->
<property name="connection.url">
jdbc:mysql://localhost:3306/test
</property>
<!-- 数据库链接用户名 -->
<property name="connection.username">用户名</property>
<!-- 数据库链接密码 -->
<property name="connection.password">密码</property>
<!-- sql方言 -->
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<!-- 是否打印sql语句 -->
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="hbm2ddl.auto">update</property>
<mapping class="hibernate.onetomany.A" />
<mapping class="hibernate.onetomany.B" />
</session-factory>
</hibernate-configuration>
测试方法
/*一对多单向关联*/ @Test public void testOneToManySingle(){ HIbernateUtil hbu=new HIbernateUtil(); Session s=hbu.getSession(); s.beginTransaction(); A a=new A(); B b1=new B(); B b2=new B(); b1.setBn("b1"); b2.setBn("b2"); a.setAn("a"); List li=new ArrayList(); li.add(b1); li.add(b2); a.setLb(li); s.save(a); s.getTransaction().commit(); s.close(); }
相关文章推荐
- Hibernate Oracle sequence的使用技巧
- jsp Hibernate批量更新和批量删除处理代码
- jsp hibernate的分页代码第1/3页
- Struts2+Hibernate实现数据分页的方法
- Hibernate环境搭建与配置方法(Hello world配置文件版)
- JAVA+Hibernate 无限级分类
- SSH整合中 hibernate托管给Spring得到SessionFactory
- jsp hibernate 数据保存操作的原理
- hibernate中的增删改查实现代码
- 解决hibernate+mysql写入数据库乱码
- java优化hibernate性能的几点建议
- java Hibernate延迟加载
- hibernate 常用方法介绍
- 详解Java的Hibernate框架中的注解与缓存
- 浅析Java的Hibernate框架中的继承关系设计
- Java的Hibernate框架中的继承映射学习教程
- Hibernate实现批量添加数据的方法
- Hibernate4在MySQL5.1以上版本创建表出错 type=InnDB
- JQuery+Ajax+Struts2+Hibernate框架整合实现完整的登录注册
- SSH框架网上商城项目第16战之Hibernate二级缓存处理首页热门显示