`
Wind_ZhongGang
  • 浏览: 264126 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Hibernate关联关系疑问

阅读更多

  有这样两个持久化对象Person和Book,两者是一对多双向关联关系,对Person.hbm.xml的bag元素设置了cascade="all"属性。下面来看看我的测试类以及测试结果来引出我的疑问。

 

 

package com.aaxis;

import com.aaxis.model.Book;
import com.aaxis.model.Person;
import junit.framework.TestCase;
import org.hibernate.*;
import org.hibernate.cfg.Configuration;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by IntelliJ IDEA.
 * User: Zhong Gang
 * Date: 10/24/11
 * Time: 11:50 AM
 */
public class HibernateCoreTest extends TestCase {

    public void testBook() throws Exception {
        Book book1 = new Book("book1", "booksssssss");
        Book book2 = new Book("book2", "booksssssss");
        List<Book> books = new ArrayList<Book>();
        books.add(book1);
        books.add(book2);
        Person person = new Person("person1", "personsssss", books);
        SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
        Session session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();
        session.save(person);
        System.out.println("person's id is " + person.id());
        List<Book> booksAfterFound = person.books();
        for (Book book : booksAfterFound) {
            System.out.println("book's id is " + book.id());
            System.out.println("the person of book's id is " + book.person());
        }
        transaction.commit();
        session.close();
    }
}

 

  下面是我运行测试的截图

 

   按照上述代码,当我在save person后,因为设置了级联book的操作,所以person和book会从瞬时态转化为持久态,这时,我想通过book来获取它的person,但是事实上是book的person为空,因为在save person时,它只发出了三条插入对象的语句,而将两者的一对多关联关系建立的语句却是在事务提交之后才发出来的,造成了从book获取person时为null,如何避免此种情况的发生呢?附上我的源码以供参考。

  

 

  • 大小: 26.4 KB
1
1
分享到:
评论

相关推荐

    hibernate多对多关系

    3. **关联维护**:在Java代码中,我们需要手动管理这种关联关系。添加一个新的关联,即在两边的集合中都加入对方;删除关联时,需确保两边的集合都移除对应的元素。 4. **级联操作**:通过`CascadeType`可以设置...

    hibernate文档杂

    6. **对Hibernate的疑问和问题**:`对hibernate的疑问.txt`和`hibernate中奇怪的问题.txt`可能是作者在学习和实践过程中遇到的难点或异常情况,这些问题可能涉及到懒加载(lazy loading)、代理对象、事务管理等复杂...

    hibernate动态映射表处理oracle的clob类型

    Hibernate是一个流行的对象关系映射(ORM)框架,它允许开发者以面向对象的方式操作数据库,而无需过多关注底层SQL语句。Oracle 10g是一个功能强大的关系型数据库管理系统,其中CLOB(Character Large Object)类型...

    Hibernate+jsp+Struts2开发的CRUD和分页代码

    2. 实体类(Entity.java):表示数据库中的表结构,通过Hibernate注解或XML配置与数据库表关联。 3. 数据访问对象(DAO.java):实现了对数据库的基本操作,如增删改查,通常会利用Hibernate Session接口进行操作。 ...

    hibernate ppt 有问题 www.willvc.com.cn 能联系到我

    3. **关联映射**:一对一、一对多、多对一、多对多的关系映射是Hibernate的重要部分。理解它们的配置和使用方式,以及级联操作和fetch策略,可以避免很多问题。 4. **HQL与SQL的区别**:Hibernate提供了自己的查询...

    JSP 开发之hibernate的hql查询多对多查询

    特别是涉及到多对多关系的数据查询,Hibernate提供了HQL(Hibernate Query Language)来处理这类复杂的关联查询。本篇将重点讲解如何在Hibernate的HQL中执行多对多查询,并通过一个具体的实例来说明。 在Hibernate...

    ssh实践

    Hibernate作为ORM(对象关系映射)框架,使得Java对象可以直接操作数据库。 首先,Struts2的核心在于Action和Result,它通过配置Action和Result来定义请求的处理流程。Action是业务逻辑的入口,而Result则是Action...

    bbs论坛,Java

    - **Hibernate或MyBatis**:ORM(对象关系映射)框架,简化数据库操作,减少手动编写SQL的繁琐工作。 - **JavaScript和AJAX**:前端交互技术,提升用户体验,如异步加载内容、实时更新等。 4. **用户认证与权限...

    校友:Poroyecto Alumno

    5. **JPA(Java Persistence API)或Hibernate**:为了简化对象关系映射(ORM),项目可能采用了JPA或Hibernate,将Java对象直接映射到数据库表,减少手动编写SQL语句的工作。 6. **Thymeleaf或JSP(JavaServer ...

    ShoppingMall

    3. Hibernate或MyBatis:持久层框架,用于数据库操作,简化ORM(对象关系映射)。 4. JDBC/DataSource:数据库连接管理,Spring通过DataSource实现数据源的统一管理。 5. Maven或Gradle:构建工具,管理项目依赖和...

Global site tag (gtag.js) - Google Analytics