hibernate的集合映射demo:
前提介绍:
书籍Book【id,name,authors】,authors可能有N个,所以这里用set表示;
实体类一个Book;表呢有两个:tbook、tauthors;
1:model:
package model;
import java.util.Set;
public class Book {
private int id;
private String name;
private Set<String> authors;
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;
}
public Set<String> getAuthors() {
return authors;
}
public void setAuthors(Set<String> authors) {
this.authors = authors;
}
}
2:Book的映射文件:hbm.xml
<class name="Book" table="TBook" lazy="false">
<id name="id">
<generator class="native"/>
</id>
<property name="name" column="bookName"/>
<set name="authors" table="TAuthors">
<key column="id" />
<element column="authorName" type="string" not-null="true" length="30"/>
</set>
</class>
这里有两个地方需要稍微注意:
*写明not-null="true"生成tauthors表时才会自动为你生成主键【id,authorName】,否则表没有主键;
*指定length="30"如果不指定,会有以下ERROR,主键生成失败;所以要指定小些;
not-null="true" length="30"
1218 [main] ERROR org.hibernate.tool.hbm2ddl.SchemaUpdate - Unsuccessful: create table TAuthors (id integer not null, topicName varchar(255) not null, primary key (id, topicName))
1218 [main] ERROR org.hibernate.tool.hbm2ddl.SchemaUpdate - Specified key was too long; max key length is 767 bytes
3.DAO:
/** add */
public void addPerson(Book p){
Session session=null;
Transaction tran=null;
try {
session=HibernateUtil.getSession();
tran=session.beginTransaction();
session.save(p);
tran.commit();
} catch (HibernateException e) {
tran.rollback();
e.printStackTrace();
}finally{
if(session!=null && session.isOpen()){
session.close();
}
}
}
4:service:
BookDao dao=new BookDao();
/** add */
public void add(Book p){
dao.addPerson(p);
}
5:JUnit 测试:
@Test public void testAdd() {
Book p=new Book();
p.setName("《Java核心技术》");
Set<String> authors=new HashSet<String>();
authors.add("Cay S.Horstmann");
authors.add("Gary Cornell");
p.setAuthors(authors);
manager.add(p);
}
6:最终数据库结果:
mysql> select * from tbook;
+----+------------------+
| id | bookName |
+----+------------------+
| 1 | 《Java核心技术》 |
+----+------------------+
1 row in set
mysql> select * from tauthors;
+----+-----------------+
| id | authorName |
+----+-----------------+
| 1 | Cay S.Horstmann |
| 1 | Gary Cornell |
+----+-----------------+
2 rows in set
表的ddl语句:
CREATE TABLE `tbook` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`bookName` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8
--------------------------------------------------------------------
CREATE TABLE `tauthors` (
`id` int(11) NOT NULL,
`authorName` varchar(30) NOT NULL,
PRIMARY KEY (`id`,`authorName`),
KEY `FK529261547AAF8BC9` (`id`),
CONSTRAINT `FK529261547AAF8BC9` FOREIGN KEY (`id`) REFERENCES `tbook` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
That's all;
分享到:
相关推荐
4. **第二级缓存**:Hibernate支持缓存策略,其中第二级缓存由`Cache`接口实现,通过插件如Ehcache,可以在多个`SessionFactory`间共享数据,提高性能。 5. **事件监听与拦截器**:`Event`与`Interceptor`接口提供...
通常这样的集合会包括Hibernate框架的基本库,如hibernate-core.jar(包含基本ORM功能)、hibernate-entitymanager.jar(用于JPA支持)、hibernate-validator.jar(用于输入验证)以及各种依赖的第三方库,如slf4j...
**标题:“Hibernate List集合映射”** 在Java的持久化框架Hibernate中,集合映射是将数据库中的表与Java对象的集合属性关联的过程。List集合映射是其中常见的一种方式,它允许我们将数据库中的一组相关记录映射到...
Hibernate 是一个开源的对象关系映射(ORM)框架,它允许开发者使用面向对象的编程语言(如Java)来处理数据库操作,极大地简化了数据库应用程序的开发。在这个“hibernate-3.3.2.GA-jar包集合”中,我们聚焦的是...
Hibernate是Java领域中一款著名的对象关系映射(ORM)框架,它允许开发者使用面向对象的方式来操作数据库,极大地简化了数据库编程。在这个`hibernate-release-5.0.7.Final`版本中,包含了所有相关的jar包,为开发者...
9. 高级特性:探讨Hibernate的高级功能,如关联映射、集合映射、继承映射、多态查询、懒加载和代理对象等。 10. 经典实例:书中提供的实战案例可以帮助读者将理论知识应用到实际项目中,加深理解和记忆。 通过阅读...
《hibernate_persistence》是关于Hibernate持久化技术的一本书,涵盖了从第17章到第23章的代码示例。这些章节的代码主要涉及了Hibernate在数据库操作中的核心功能,包括查询条件设置、高级查询、数据源配置以及与...
Hibernate是一个开源的对象关系映射(ORM)框架,它允许开发者使用面向对象的编程方式来操作数据库,从而简化了Java应用程序中的数据访问层。在“hibernate-3.2 jar包”中,包含了一系列用于支持Hibernate 3.2版本...
标题"hibernate最新版jar包(全)"表明这是一个包含Hibernate最新版本所有必需的JAR文件的集合。Hibernate是一个流行的Java持久化框架,它简化了数据库与Java对象之间的交互,使得开发者能更方便地进行数据库操作。 ...
13.4. 处理器映射(handler mapping) 13.4.1. BeanNameUrlHandlerMapping 13.4.2. SimpleUrlHandlerMapping 13.4.3. 拦截器(HandlerInterceptor) 13.5. 视图与视图解析 13.5.1. 视图解析器 13.5.2. 视图解析链 ...
Hibernate是一款强大的Java持久化框架,它为Java开发者提供了一种对象关系映射工具,使得开发者可以使用面向对象的方式来操作数据库,极大地简化了数据库操作。在Java应用开发中,特别是企业级应用开发,Hibernate被...
12. **集合映射**:通过`@OneToMany`、`@ManyToOne`、`@OneToOne`、`@ManyToMany`等注解,实现对象间的关联关系,如一对多、多对一、一对一和多对多。 13. **级联操作(Cascade)**:通过`cascade`属性,可以设置当...
标题"hibernate-distribution"指的是Hibernate的一个发行版,这通常意味着它是一个包含了所有必要的文件和库,供用户在他们的开发环境中使用Hibernate的集合。描述中的"hibernate-distribution-3.3.2.GA-dist"进一步...
4. **JAR包**:Java Archive (JAR) 文件是Java平台特有的归档格式,用于集合多个类文件、资源文件和其他相关文件。在Hibernate中,JAR包包含了框架的实现和库,如核心API、持久化引擎、C3P0连接池等。 5. **Eclipse...
12. **集合映射**:讲解了如何将Java集合类如List、Set和Map映射到数据库表的行。 13. **性能优化**:提供了关于提高Hibernate应用性能的建议,如批处理、延迟加载、缓存策略优化等。 14. **事件监听器和拦截器**...
【hibernate教程-从入门到精通-第4篇(共四篇)共2】这篇教程是关于Java持久层框架Hibernate的学习指南,旨在帮助初学者深入理解并掌握Hibernate的核心概念和技术。Hibernate作为一款强大的对象关系映射(ORM)工具,...
Hibernate支持第二级缓存和查询缓存,可以显著提高性能。例如,使用Ehcache作为缓存提供者,通过配置文件启用缓存服务。 六、事务管理 Hibernate支持JTA(Java Transaction API)和JDBC事务管理。开发者可以通过...
- **Hibernate集合映射之Map-----element映射实体类型值.doc、Hibernate集合映射之Map-----element映射基本类型值.doc**:讨论了如何映射Java集合到数据库表,特别是使用Map类型和Element元素。 - **Hibernate with ...