`
myharmony
  • 浏览: 107864 次
  • 性别: Icon_minigender_1
  • 来自: 中山市
社区版块
存档分类
最新评论

Hibernate 多对一的 实现

阅读更多
在一对多的问题中遇到Exception 如下:
org.hibernate.exception.SQLGrammarException: could not initialize a collection


Department 如下:
package com.domain;
import java.util.Set;

public class Department {
    private int id;
    private String deptname ;
    private Set<Employee> emps;

    public Set<Employee> getEmps() {
        return emps;
    }

    public void setEmps(Set<Employee> emps) {
        this.emps = emps;
    }

    public Department() {
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getDeptname() {
        return deptname;
    }

    public void setDeptname(String deptname) {
        this.deptname = deptname;
    }
}

测试如下:
public class ManyToOneTest {
    public static void main(String[] args) {
        Set<Employee> emps = queryEmpByDeptID(1);
        for (Employee emp : emps) {
            System.out.println(emp.getId() + " " + emp.getName());
        }
        System.out.println("----end----");
    }
    static Set<Employee> queryEmpByDeptID(int deptid) {
        Session session = null;
        Transaction tx = null;
        Department dept = new Department();
        [b]Set[/b]<Employee> emps;
        try {
            session = HibernateUtil.getSession();
            dept = (Department) session.get(Department.class, deptid);
            Hibernate.initialize(dept.getEmps());
            System.out.println(dept.getEmps().size());
            emps = [b](Set)[/b] dept.getEmps();
            return emps;
        } catch (HibernateException e) {
            throw e;
        } finally {
            if (session != null) {
                session.close();
            }
        }
    }
}

开始测试的时候,没有注意类型要一致,用了List类型,结果就出现了
org.hibernate.exception.SQLGrammarException: could not initialize a collection

在Department中 尽量不用List作为集合的类型,原因如下:
lists are indexed collections and therefor need a index column
分享到:
评论

相关推荐

    hibernate多对多关联映射

    本文将深入探讨Hibernate如何实现多对多关联映射,并通过实际例子解析相关配置和操作。 一、多对多关联概述 在数据库设计中,多对多关联表示两个表之间的关系,如学生和课程的关系,一个学生可以选修多门课程,而...

    hibernate一对一的两种实现方式

    本篇文章将详细探讨Hibernate中一对一关联的两种实现方式:基于主键关联和基于外键关联,并通过源码分析及实际应用示例来阐述它们的工作原理和配置细节。 一、基于主键关联 1.1 基本概念 基于主键关联是指两个实体...

    hibernate一对多项目

    本项目“hibernate一对多项目”旨在演示如何在JavaWeb应用中使用Hibernate处理一对多的关系映射。这里我们将深入探讨 Hibernate 的一对多关系、配置以及在实际项目中的应用。 首先,一对多关系在数据库中很常见,...

    Hibernate的多对一和一对多操作实例

    在数据库层面,实现多对一和一对多关系通常涉及创建表之间的外键约束。但在本例中,作者提到了一种较为简化的设计方式,即不在数据库层面上明确设定外键,而是将逻辑关系的控制交给了Hibernate框架。这种方式虽然...

    hibernate(一对多,多对一映射)操作

    压缩包中的"**Hibernater**"文件可能包含了实现这些操作的Java源代码和数据库脚本,读者可以参考其中的实现细节,进一步理解Hibernate的一对多和多对一映射以及如何在实际项目中运用。通过实践,开发者可以更好地...

    Hibernate annotation JPA 一对多,多对多

    在本主题中,我们将深入探讨使用Hibernate注解来实现JPA的一对多、多对多和多对一的关系映射。 1. **一对多关系**: 在现实世界中,一个老师可以教多个学生,或者一个班级可以包含多个学生,这就是典型的一对多...

    hibernate一对多,多对一,一对多双向关联

    “Hibernate 一对多,多对一,一对多双向关联”是指在Java持久化框架Hibernate中,实体间常见的三种关联关系。在数据库设计中,这种关联关系是常见的,例如一个用户可以有多个订单(一对多),一个订单对应一个用户...

    Hibernate多对多实例+数据库代码

    通过查看代码和运行示例,开发者可以深入理解Hibernate是如何自动处理复杂的关联操作,比如通过中间表实现多对多的添加、删除和查找。 **总结** 这个"Hibernate多对多实例+数据库代码"涵盖了ORM的核心概念,特别是...

    hibernate基于主外键的一对多/多对一关联

    总结起来,Hibernate中的一对多/多对一关联是通过主外键映射来实现的,通过注解和配置文件定义实体间的关联关系,利用懒加载或立即加载策略控制数据获取,同时要注意双向关联的维护和级联操作的设置,以确保数据的...

    Hibernate多对多关联添加及查询示例

    本示例主要关注的是Hibernate中的多对多关联映射及其添加与查询方法。 多对多关联是数据库设计中的一种常见关系类型,指的是两个实体之间可以存在多个对应关系。例如,在学生与课程的关系中,一个学生可以选修多门...

    Hibernate 一对一,一对多,多对多例子

    “Hibernate 一对一,一对多,多对多例子” 指的是使用Hibernate框架实现数据库中不同关联关系的示例。Hibernate是一个Java持久化框架,它提供了对象关系映射(ORM)功能,使得开发人员可以方便地在Java对象和关系...

    hibernate注册功能的实现

    在IT行业中,Web开发是关键领域之一,而Struts和Hibernate是两个非常重要的框架,用于构建动态、数据驱动的Web应用程序...在实际开发中,还可能涉及事务管理、安全性配置以及更多优化措施,但基础的实现过程如上所述。

    hibernate多对多关联映射(单项关联)

    总的来说,这篇博客和相关代码示例为开发者提供了一个理解和实现Hibernate中多对多单向关联的起点,帮助他们更好地处理复杂的数据库关系映射。学习和实践这部分内容对于提升Java后端开发能力,特别是使用Hibernate...

    论坛系统项目(Struts 2+Hibernate+Spring实现)

    论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts...

    JSP+Hibernate实现留言板

    总的来说,"JSP+Hibernate实现留言板"项目展示了如何利用这两项技术构建一个完整的Web应用。通过结合JSP的视图展示能力和Hibernate的数据处理能力,我们可以轻松地构建出功能强大的留言板系统,同时保持代码的可维护...

    STRUTS2+HIBERNATE详细的分页实现代码详细的分页实现代码

    Hibernate是一个面向Java环境的对象关系映射(ORM)框架,它提供了对数据库操作的高级抽象,使得开发者能够以面向对象的方式来操作数据库。通过Hibernate,开发者可以将实体对象与数据库表进行映射,从而极大地提高...

    Spring+Hibernate实现用户登录

    本项目"Spring+Hibernate实现用户登录"旨在演示如何整合这两个框架,构建一个能够处理用户登录功能的Web应用程序。下面将详细介绍这个项目涉及的关键知识点。 1. **Spring框架**:Spring是一个全面的Java应用开发...

    hibernate多对多

    "Hibernate多对多"指的是在Hibernate中处理两个实体类之间多对多关系的一种技术。 在关系型数据库中,多对多关系是最复杂的一种关联类型,例如,学生可以选修多门课程,而一门课程也可以被多名学生选修。这种关系在...

    Hibernate方法的实现

    一级缓存自动管理,对同一个Session内的对象进行多次读取不会导致多次数据库访问。二级缓存则需要手动配置,可跨Session共享数据,提高性能。 7. **事务管理** Hibernate支持JTA(Java Transaction API)和JDBC...

Global site tag (gtag.js) - Google Analytics