`
zhudeming
  • 浏览: 64114 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Hibernate基于外键的查询

阅读更多
假设有两个表
CREATE TABLE company (
  com_id int(11) NOT NULL auto_increment,
  com_name varchar(50) NOT NULL,
  PRIMARY KEY  (com_id),
  UNIQUE KEY com_id (com_id)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

CREATE TABLE jobs (
  jobs_id int(11) NOT NULL auto_increment,
  com_id int(11) NOT NULL,
  jobs_name varchar(50) NOT NULL,
  jobs_email varchar(50) NOT NULL,
  PRIMARY KEY  (jobs_id),
  UNIQUE KEY jobs_id (jobs_id),
  KEY com_id (com_id),
  CONSTRAINT jobs_fk FOREIGN KEY (com_id) REFERENCES company(com_id)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

其中company表对应Company类,jobs表对应Jobs类。
因为通过Hibernate的多对一关联的配置,com_id不出现在Jobs.hbm.xml文件的配置信息里,取而代之的是Company的配置,所以关于如何按jobs表的外键(com_id)查询通过baidu、google查询,发现了两种方式:
1.在DAO层的查询方法:
   public List<Jobs> jobs_select(int com_id) {
        //session和事务操作......
        String hql="from Jobs as j where j.company.com_id =?";
        Query query=session.createQuery(hql);
        query.setInteger(0,com_id);
        return query.list();
    }
2.在DAO层的查询方法:
   public List<Jobs> jobs_select(int com_id) {
        //session和事务操作......
        String hql="from Jobs as j where j.company=?";
        Query query=session.createQuery(hql);
        Company com=new Company();
        com.setCom_id(com_id);
        query.setParameter(0,com);
        return query.list();
    }
通过上述两种方式都可以实现基于外键的查询,如果有人发现更好的方式,请通过回复的方式贴上,让大家共同学习。另附:Hibernate_DEV_GUIDE.pdf电子书
下面是Compay、Jobs类和Company.hbm.xml、Jobs.hbm.xml的代码:
public class Company {
    private int com_id;
    private String com_name;
    private Set jobs;

    //getter and setter......

}
public class Jobs {
    private int jobs_id;
    private int com_id;
    private String jobs_name;
    private String jobs_email;
    private Company company;
   
    //getter and setter......
   
}

Company.hbm.xml:
<?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">
<hibernate-mapping>
    <class name="com.pojo.Company" table="company" catalog="testHib" dynamic-insert="true" dynamic-update="true">
        <id name="com_id" type="java.lang.Integer">
            <column name="com_id" />
            <generator class="identity"/>
        </id>
        <property name="com_name" type="java.lang.String">
            <column name="com_name" length="50" not-null="true" />
        </property>
        <set name="jobs" table="jobs" lazy="false" inverse="true" cascade="delete" sort="unsorted">
            <key column="com_id"/>
            <one-to-many class="com.pojo.Jobs"/>
        </set>
    </class>
</hibernate-mapping>

Jobs.hbm.xml:
<?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">
<hibernate-mapping>
    <class name="com.pojo.Jobs" table="jobs" catalog="testHib" dynamic-insert="true" dynamic-update="true">
        <id name="jobs_id" type="java.lang.Integer">
            <column name="jobs_id"/>
            <generator class="identity"/>
        </id>
        <property name="jobs_name" type="java.lang.String">
            <column name="jobs_name" length="50" not-null="true" >
        </property>
        <property name="jobs_email" type="java.lang.String">
            <column name="jobs_email" length="50" not-null="true"/>
        </property>
        <many-to-one name="company" class="com.pojo.Company" cascade="none" outer-join="auto" column="com_id"/>
    </class>
</hibernate-mapping>
分享到:
评论

相关推荐

    Hibernate基于外键的一对多单向关联

    “Hibernate基于外键的一对多单向关联”这个标题指的是在Java持久化框架Hibernate中,如何通过外键实现一个实体类(如订单)与另一个实体类(如商品)之间的一对多关系,并且这种关联是单向的,即从订单端可以访问到...

    hibernate中基于外键的one2one

    总之,Hibernate中的基于外键的One-to-One映射是一种常用的数据关联技术,理解和熟练应用这一概念对于Java开发者来说至关重要。通过细致的配置和合理的实体设计,我们可以构建出高效、稳定的数据库应用程序。

    Hibernate Annotation 基于外键的一对多双向关联

    本文将深入探讨如何使用Hibernate注解实现基于外键的一对多双向关联。我们将通过具体实例来解析这个主题,并结合源码分析其工作原理。 首先,我们要明白一对多关联意味着一个实体可以拥有多个关联的实体。在数据库...

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

    "hibernate基于主外键的一对多/多对一关联"是Hibernate中两个核心的概念,用于描述实体之间的关系。下面将详细阐述这两个关联类型及其实现方式。 一对多关联是指在数据库中,一个表的记录可以与另一个表中的多个...

    Hibernate Annotation 基于外键的单向多对一关联

    本篇文章将深入探讨如何使用Hibernate Annotation来实现基于外键的单向多对一关联。 在关系型数据库中,多对一关联是一种常见的关系类型,意味着一个实体(如表)可以与另一个实体有多条记录关联,而另一个实体只能...

    hibernate 双向一对一基于外键的关联映射

    在本案例中,我们将探讨如何在Hibernate中实现基于外键的双向一对一关联映射。 首先,我们来看一下双向一对一关联的基本概念。双向一对一关联意味着两个实体类A和B,它们之间存在一对一的关系,并且A能访问B,B也能...

    Hibernate基于连接表的一对多单向关联

    总结,"Hibernate基于连接表的一对多单向关联"涉及到的主要知识点包括:数据库设计的一对多关系、Hibernate的实体映射、单向关联的配置、以及如何在Java代码中操作和查询这种关联。理解并熟练应用这些知识点,对于...

    Hibernate 一对一关联查询.docx

    本文将深入探讨基于外键的一对一关联查询,并通过具体的代码示例进行解析。 ### 1. 基于外键的一对一关联 在一对一关联中,外键方式是指在一个实体类中引用另一个实体类的主键作为外键。这种方式下,关联关系的...

    Hibernate的缓存级联查询

    HQL(Hibernate Query Language)是Hibernate提供的面向对象的查询语言,它支持多种连接查询类型,如内连接、迫切内连接、隐式内连接、左外连接、迫切左外连接、右外连接和交叉连接,提供了与SQL类似的查询功能。...

    hibernate一对一的两种实现方式

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

    Hibernate 关联关系映射分类

    在Hibernate中,一对一关联可以被进一步细分为单向关联和双向关联,以及基于主键关联和基于外键关联。 #### 单向关联 - **基于主键关联**:在这种情况下,两个实体中的一个实体的主键作为另一个实体的外键,实现了...

    主外键的配置

    `&lt;many-to-one&gt;`标签用于定义一对多的关系,`outer-join="ture"`, `not-null="true"`, 和 `lazy="false"`分别表示外键关联的查询方式、外键是否可为空以及延迟加载策略。 3. **双主键、无外键配置** 当实体类有两...

    Hibernate教程04_关系映射之一对一单向外键关联

    这个文件名暗示了这是一组基于Spring、Struts和Hibernate(简称S2SH)的示例代码,具体涉及的是关系映射中的一对一单向外键关联。"uni_fk"表示单向(unidirectional)外键(foreign key)关联。在数据库中,外键用于...

    自己收集的SSH中的几个常见问题和解决方式

    我自己做项目中遇到了不少问题,现将其解决方法共享,大家探讨下: (1)解决MYSQL乱码问题 ...(4)Hibernate基于外键的查询方法 (5)Hibernate Session中的 flush方法的作用 (6)分析java.lang.OutOfMemoryError PermGen space

    hibernate(基于MVC的服务器架构技术)

    在基于MVC(Model-View-Controller)的服务器架构中,Hibernate 作为模型层的重要组件,为数据访问提供了高效、灵活的支持。 ### Hibernate 基础入门 1. **Hibernate 简介** Hibernate 是一款开源的ORM框架,由 ...

    hibernate中基于主键的one2one

    此外,一对一关联还可以通过外键实现,这种方式下,一个实体的主键成为另一个实体的外键,但这里我们主要讨论基于主键的关联。 在实际开发中,根据业务需求和数据模型,你可能需要权衡使用哪种方式来实现一对一关联...

    基于struts2+hibernate网上书城

    它提供了Session接口来处理事务,实体类通过注解或XML配置文件与数据库表关联,同时支持HQL(Hibernate Query Language)进行查询操作。 3. **MVC模式**:MVC模式是一种软件设计模式,将业务逻辑(Model)、用户...

    hibernate-extensions-2.1.3.zip ,middlegen for hibernate

    - 生成映射文件:基于解析的结果,自动生成符合Hibernate规范的XML映射文件。 - 创建Java类:根据表结构,自动生成带有getter和setter方法的Java实体类。 - 保持更新:当数据库模式发生变化时,Middlegen可以更新...

    基于注解的关联关系Hibernate

    在这个“基于注解的关联关系Hibernate”的主题中,我们将深入探讨如何使用Hibernate的注解来配置不同类型的关联关系,包括一对一(One-to-One)、一对多(One-to-Many)、多对一(Many-to-One)和多对多(Many-to-...

Global site tag (gtag.js) - Google Analytics