- 浏览: 204015 次
- 性别:
- 来自: 合肥
文章分类
- 全部博客 (156)
- 职场人生 (6)
- 开发时遇见的问题 (14)
- 技术学习 (13)
- Hibernate开发与实战学习 (10)
- Junit (9)
- 设计模式 (4)
- Lucene (1)
- Log4J (1)
- JBPM (0)
- OA (0)
- Spring (0)
- Struts2 (1)
- Android (2)
- Python (1)
- 生活点点滴滴 (8)
- Java (11)
- JavaScript&Jquery (22)
- Hadoop (1)
- JSP&Servlet (8)
- dom4j (2)
- mysql (2)
- Oracle (7)
- PHP (0)
- Jmeter (1)
- 测试方面的东东 (1)
- 励志文章 (3)
- CSS (4)
- XHTML&HTML (1)
- Linux相关 (7)
- C&C++ (2)
- Unix C (3)
- 开发软件配置及软件应用 (2)
- English Study And Movie Scripts (3)
- My English World (1)
最新评论
-
yingzhixing:
不错不错~~
利用org.springframework.web.util中的HtmlUtils工具类 -
yonguo:
博主能把完整的pom配置贴一下共享吗?
在maven中使用YUI-Compressor -
yan578351314:
我的为什么会出现语法错误呢?一大推错误信息...
在maven中使用YUI-Compressor -
jstenjoy:
什么是JBPM -
疯狂的草儿:
cat_rat 写道我是2010年9月份进入公司的--2010 ...
辞职了,离开了我工作的第一家公司
第九章Hibernate映射一对一关联关系
- 共享主键关联
- 唯一外键关联
1.两个关联表使用相同的主键值
数据准备:
-- Create table create table USERS1 ( USERNAME VARCHAR2(40), PASSWORD VARCHAR2(40), ID NUMBER(8) not null )
Profile表用于保存用户的其他信息。
-- Create table create table PROFILE ( ID NUMBER(8) not null, EMAIL VARCHAR2(200), PHONE VARCHAR2(20), MOBILE VARCHAR2(20), ADDRESS VARCHAR2(200), POSTCODE VARCHAR2(10) )
其中,ID即是主键又是外键。因此称为共享主键。
User:
public class User implements java.io.Serializable { private static final long serialVersionUID = 1L; private Integer id; private String username; private String password; private Profile profile; public Profile getProfile() { return profile; } public void setProfile(Profile profile) { this.profile = profile; } public User() { } public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return this.username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return this.password; } public void setPassword(String password) { this.password = password; } }
User映射配置:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Mapping file autogenerated by MyEclipse Persistence Tools --> <hibernate-mapping> <class name="com.crazy.User" table="USERS1" schema="SCOTT"> <id name="id" type="java.lang.Integer"> <column name="ID" precision="8" scale="0" /> <generator class="increment"></generator> </id> <property name="username" type="java.lang.String"> <column name="USERNAME" length="40" /> </property> <property name="password" type="java.lang.String"> <column name="PASSWORD" length="40" /> </property> <one-to-one name="profile" class="com.crazy.Profile"></one-to-one> </class> </hibernate-mapping>
Profile类:
public class Profile implements java.io.Serializable { private Integer id; private String email; private String phone; private String mobile; private String address; private String postcode; private User user; public Profile() { } public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } public String getEmail() { return this.email; } public void setEmail(String email) { this.email = email; } public String getPhone() { return this.phone; } public void setPhone(String phone) { this.phone = phone; } public String getMobile() { return this.mobile; } public void setMobile(String mobile) { this.mobile = mobile; } public String getAddress() { return this.address; } public void setAddress(String address) { this.address = address; } public String getPostcode() { return this.postcode; } public void setPostcode(String postcode) { this.postcode = postcode; } }
Profile映射配置:
其主键是使用user的。
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Mapping file autogenerated by MyEclipse Persistence Tools --> <hibernate-mapping> <class name="com.crazy.Profile" table="PROFILE" schema="SCOTT"> <id name="id" type="java.lang.Integer"> <column name="ID" precision="8" scale="0" /> <generator class="foreign"> <param name="property">user</param> </generator> </id> <property name="email" type="java.lang.String"> <column name="EMAIL" length="200" /> </property> <property name="phone" type="java.lang.String"> <column name="PHONE" length="20" /> </property> <property name="mobile" type="java.lang.String"> <column name="MOBILE" length="20" /> </property> <property name="address" type="java.lang.String"> <column name="ADDRESS" length="200" /> </property> <property name="postcode" type="java.lang.String"> <column name="POSTCODE" length="10" /> </property> <one-to-one name="user" class="com.crazy.User"></one-to-one> </class> </hibernate-mapping>
测试代码:
public class HibernateTest { public static void main(String args[]){ HibernateTest test = new HibernateTest(); test.add(); } public void add(){ Profile profile = new Profile(); profile.setAddress("河南胜利路"); profile.setEmail("yesmeshtu2008@163.com"); profile.setMobile("13301239472145"); User user = new User(); profile.setUser(user); user.setUsername("grass"); user.setPassword("123"); user.setProfile(profile); Session session = new Configuration().configure().buildSessionFactory().openSession(); session.beginTransaction(); session.save(profile); session.save(user); session.getTransaction().commit(); } }
2.多对一关联的特殊形式,要求多方唯一
User类:
public class User implements java.io.Serializable { private Integer id; private String username; private String password; private Profile profile; public Profile getProfile() { return profile; } public void setProfile(Profile profile) { this.profile = profile; } public User() { } public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return this.username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return this.password; } public void setPassword(String password) { this.password = password; } }
User映射配置:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Mapping file autogenerated by MyEclipse Persistence Tools --> <hibernate-mapping> <class name="com.crazy.User" table="USERS1" schema="SCOTT"> <id name="id" type="java.lang.Integer"> <column name="ID" precision="8" scale="0" /> <generator class="increment" /> </id> <property name="username" type="java.lang.String"> <column name="USERNAME" length="40" /> </property> <property name="password" type="java.lang.String"> <column name="PASSWORD" length="40" /> </property> <one-to-one name="profile" class="com.crazy.Profile"></one-to-one> </class> </hibernate-mapping>
Profile类:
public class Profile implements java.io.Serializable { private Integer id; private String email; private String phone; private String mobile; private String address; private String postcode; private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } public Profile() { } public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } public String getEmail() { return this.email; } public void setEmail(String email) { this.email = email; } public String getPhone() { return this.phone; } public void setPhone(String phone) { this.phone = phone; } public String getMobile() { return this.mobile; } public void setMobile(String mobile) { this.mobile = mobile; } public String getAddress() { return this.address; } public void setAddress(String address) { this.address = address; } public String getPostcode() { return this.postcode; } public void setPostcode(String postcode) { this.postcode = postcode; } }
Profile映射配置:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Mapping file autogenerated by MyEclipse Persistence Tools --> <hibernate-mapping> <class name="com.crazy.Profile" table="PROFILE1" schema="SCOTT"> <id name="id" type="java.lang.Integer"> <column name="ID" precision="8" scale="0" /> <generator class="increment" /> </id> <property name="email" type="java.lang.String"> <column name="EMAIL" length="200" /> </property> <property name="phone" type="java.lang.String"> <column name="PHONE" length="20" /> </property> <property name="mobile" type="java.lang.String"> <column name="MOBILE" length="20" /> </property> <property name="address" type="java.lang.String"> <column name="ADDRESS" length="200" /> </property> <property name="postcode" type="java.lang.String"> <column name="POSTCODE" length="10" /> </property> <many-to-one name="user" class="com.crazy.User" unique="true"> <column name="user_id"></column> </many-to-one> </class> </hibernate-mapping>
配置如下:
<many-to-one name="user" class="com.crazy.User" unique="true"> <column name="user_id"></column> </many-to-one>
测试代码:
public class HibernateTest { public static void main(String args[]){ HibernateTest test = new HibernateTest(); test.add(); } public void add(){ Profile profile = new Profile(); profile.setAddress("河南胜利路"); profile.setEmail("yesmeshtu2008@163.com"); profile.setMobile("13309472145"); User user = new User(); profile.setUser(user); user.setUsername("grass"); user.setPassword("123"); user.setProfile(profile); Session session = new Configuration().configure().buildSessionFactory().openSession(); session.beginTransaction(); session.save(profile); session.save(user); session.getTransaction().commit(); } }
发表评论
-
第八章Hibernate映射多对一关联关系
2011-01-26 08:51 971第八章Hibernate映射多对一关联关系 多对 ... -
第七章Hibernate 组件(component)映射
2011-01-25 17:05 942第七章 Hibernate组件(component)映射 ... -
第六章Hibernate-的集合映射
2011-01-22 09:44 1083第六章Hibernate-的集合映射 Set映射 ... -
第五章Hibernate-OSIV与泛型DAO模式
2011-01-21 14:02 1264第五章Hibernate -OSIV与泛型DAO模式 ... -
第四章Hibernate持久化对象的生命周期
2011-01-21 10:59 773第四章 持久化对象的生命周期 持久化对象生命周期 ... -
第三章标识符属性生成策略与对象识别
2011-01-19 21:56 957第三章标识符属性生成 ... -
第二章Hibernate的核心接口与类
2011-01-14 15:51 892Hibernate中的核心接口与类 Con ... -
hibernate经典问题的经典贴
2009-12-24 09:26 830Starting 我们为什么要学习Hibernate ... -
第一章Hibernate开发与实战学习
2009-12-20 15:29 1235首先要做一下准备工作,即获得所有的jar包和相应的工具。 1 ...
相关推荐
### Hibernate关联关系映射 #### 一、单向关联 单向关联指的是对象之间的关联关系只在一个方向上存在,也就是说这种关联关系仅在一个类中表示出来,在另一个类中不体现这种关联。 ##### 1. 一对一外键单向关联 ...
由于只给出了"hibernate_003"这个文件名,我们无法直接获取具体信息,但可以猜测这是一个系列教程的一部分,"003"可能是表示序列号,表示这是关于Hibernate关联关系的第三个主题或者第三部分。 **详细知识点:** 1...
10. **最佳实践**:如避免过多的中间表查询,合理设计关联关系,以及在不必要时选择一对一或一对多替代多对多等。 总结来说,理解并能正确使用Hibernate中的多对多双向关联是Java开发中的重要技能,涉及到实体设计...
9. **缓存机制**:理解Hibernate的第一级缓存(Session缓存)和第二级缓存(可选,如EHCache),它们如何影响一对多关联的读写操作。 10. **性能考虑**:在设计一对多双向组合关联时,要考虑到查询效率、内存消耗等...
15.1 映射一对一关联 15.1.1 按照外键映射 15.1.2 按照主键映射 15.2 映射单向多对多关联 15.3 映射双向多对多关联关系 15.3.1 关联两端使用元素 15.3.2 在inverse端使用元素 15.3.3 使用组件类...
7. **一对多、多对一、多对多关系映射**:在chapter02的实践中,你可能遇到实体类之间的一对多、多对一或者多对多关系。Hibernate提供了多种方式来处理这些关系,例如集合映射、联接表等。 8. **懒加载和立即加载**...
9. **一对多、多对一、多对多关系映射**:在数据库中,不同表之间的关联关系需要在实体类中通过注解或XML配置来映射,例如@OneToMany、@ManyToOne、@ManyToMany。 10. **延迟加载和级联操作**:Hibernate的延迟加载...
15.1 映射一对一关联 15.1.1 按照外键映射 15.1.2 按照主键映射 15.2 映射单向多对多关联 15.3 映射双向多对多关联关系 15.3.1 关联两端使用元素 15.3.2 在inverse端使用元素 15.3.3 使用组件类...
15.1 映射一对一关联 15.1.1 按照外键映射 15.1.2 按照主键映射 15.2 映射单向多对多关联 15.3 映射双向多对多关联关系 15.3.1 关联两端使用元素 15.3.2 在inverse端使用元素 15.3.3 使用组件类...
15.1 映射一对一关联 15.1.1 按照外键映射 15.1.2 按照主键映射 15.2 映射单向多对多关联 15.3 映射双向多对多关联关系 15.3.1 关联两端使用元素 15.3.2 在inverse端使用元素 15.3.3 使用组件类...
第十章可能会涉及更复杂的查询技巧,如多对一、一对多、多对多等关联关系的处理。Hibernate提供了多种关联映射方式,例如使用@OneToOne、@ManyToOne、@OneToMany和@ManyToMany注解。这一章还会讨论级联操作,使得在...
3. **实体映射**:详述如何使用Hibernate的XML映射文件(hbm.xml)或注解来定义Java类与数据库表之间的映射关系,包括字段映射、关联映射(一对一、一对多、多对多)等。 4. **Session与Transaction**:深入理解...
Hibernate 支持各种关联映射,如一对一、一对多、多对一和多对多。理解这些关联关系的建立和查询,能够帮助开发者设计出更灵活的数据模型。 8. **缓存机制**: Hibernate 提供了第一级缓存和第二级缓存,以及查询...
Hibernate支持多种对象关系映射,如一对一、一对多、多对多等,通过配置文件或注解定义实体间的关联。 **知识点九:懒加载和立即加载** Hibernate提供了懒加载和立即加载策略,以控制关联对象的加载时机。懒加载...
8. **一对多、多对一、一对一关联映射**:这些关系映射是ORM框架的核心功能,用于处理数据库中的关联关系。 9. **继承映射**:支持单表继承、联合继承和表-per-hierarchy等多种策略,使得Java类的继承关系能够自然...
7.3.1 多态的多对一关联 7.3.2 多态集合 7.3.3 对联合的多态关联 7.3.4 每个具体类一张多态表 7.4 小结 第8章 遗留数据库和定制SQL 8.1 整合遗留数据库 8.1.1 处理主键 8.1.2 带...
10. **一对多、多对一、一对一和多对多关系映射**:Hibernate支持多种关联映射,包括集合映射,如List、Set、Map等,以及复合主键的处理。 11. **继承映射**:在Java中,子类可以继承父类。在Hibernate中,这种继承...
9. 高级特性:探讨Hibernate的高级功能,如关联映射、集合映射、继承映射、多态查询、懒加载和代理对象等。 10. 经典实例:书中提供的实战案例可以帮助读者将理论知识应用到实际项目中,加深理解和记忆。 通过阅读...
5. **关联映射**:Hibernate支持多种对象之间的关联映射,包括一对一、一对多、多对一、多对多关系。这些关联可以在配置文件中定义,或者使用JPA注解来声明。 6. **集合映射**:在处理一对多、多对多关联时,...