hibernate注解之单/双向多对一映射

简单了解了hibernate注解annotation后,我们来看下怎样用注解实现单/双向的多对一映射。

新建一个java项目,结构如下:


单向多对一映射

Book类

package com.test.pojo;
import java.util.Date;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
//entity表示需要持久化的实体类
@Entity
//表示实体类所对应的表
@Table(name="t_book")
public class Book {
	//id主键
	@Id
	//指定主键生成策略
	@GeneratedValue(strategy=GenerationType.AUTO)
	private int id;
	@Column(name="name")
	private String name;
	@Column
	private double price;
	private String author;
	private Date pubDate;
	@ManyToOne(cascade=CascadeType.ALL)
	@JoinColumn(name="category_id")
	private Category category;
	//省略get/set
}
category类

@Entity
@Table
public class Category {
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private int id;
	private String name;
	//省略get/set
}
hibernate.cfg.xml配置文件

<hibernate-configuration>
<session-factory>
	<property name="connection.driver_class">
		com.mysql.jdbc.Driver
	</property>
	<property name="connection.url">
		jdbc:mysql:///hibernatetest
	</property>
	<property name="connection.username">root</property>
	<property name="connection.password">root</property>
	<property name="dialect">
		org.hibernate.dialect.MySQLDialect
	</property>
	<property name="show_sql">true</property>
	<property name="format_sql">true</property>
	<mapping class="com.test.pojo.Book" />
	<mapping class="com.test.pojo.Category" />
</session-factory>
</hibernate-configuration>

测试类

public class HibernateTest {
	@Test
	public void testCreateDB(){
		Configuration cfg=new Configuration().configure();
		SchemaExport se=new SchemaExport(cfg);
		se.create(true, true);
	}
	@Test
	public void testSave(){
		Session session=HibernateUtil.getSession();
		Transaction tx=session.beginTransaction();
		Book book=new Book();
		book.setName("读者");
		book.setPrice(21.5);
		book.setAuthor("读者出版传媒有限公司");
		book.setPubDate(new Date());
		Category category=new Category();
		category.setName("文学");
		book.setCategory(category);
		session.save(book);
		tx.commit();
		HibernateUtil.closeSession();
	}
	@Test
	public void testGet(){
		Session session=HibernateUtil.getSession();
		Transaction tx=session.beginTransaction();
		Book book=(Book) session.get(Book.class, 1);
		System.out.println(book.getName()+"----"+book.getCategory().getName());
	}
}

HibernateUtil类请参考文章 《hibernate注解annotation入门》

测试类运行结果就不做详细展示了,感兴趣的可以自己测试下。

双向多对一映射

这里只展示与单向多对一映射不同的地方。

category类

@Entity
@Table
public class Category {
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private int id;
	private String name;
	//在多对一中的一端,设置了OneToMany后,必须指定mappedBy=多端的属性,这里的多端是Book
	@OneToMany(mappedBy="category")
	private Set<Book> books=new HashSet<Book>();
	//省略get/set
}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值