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

Hibernate ORM One to Many

阅读更多

  讨论一下Hibernate中对象的一对多或多对一关联关系。这里以日志与日志评论来说明这样的关系,一个日志可以有多条评论,而一条评论则只能对应一个日志。

 

  说明一对多的双向关联。它的现实意义就是从日志的角度可以得到该日志下的多条评论,而从评论的角度则可以知道它属于某个日志。

 

  1.Diary.java

 

package com.template.model;

import java.util.List;

/**
 * Created by IntelliJ IDEA.
 * User: Zhong Gang
 * Date: 11-7-20
 * Time: 下午8:13
 * To change this template use File | Settings | File Templates.
 */
public class Diary {
    private Integer id;
    private String title;
    private String content;

    private List<Comment> comments;

    public Diary() {
    }
}

 

  2.Diary.hbm.xml

 

 

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping default-access="field">

    <class name="com.template.model.Diary" table="diary">
        <id name="id" column="id" type="java.lang.Integer">
            <generator class="native"/>
        </id>
        <property name="title" column="title" type="java.lang.String"/>
        <property name="content" column="content" type="java.lang.String"/>

        <bag name="comments" table="comment">
            <key column="diaryid"/>
            <one-to-many class="com.template.model.Comment"/>
        </bag>
    </class>

</hibernate-mapping>

 

  3.Comment.java

 

package com.template.model;

/**
 * Created by IntelliJ IDEA.
 * User: Zhong Gang
 * Date: 11-7-20
 * Time: 下午8:13
 * To change this template use File | Settings | File Templates.
 */
public class Comment {
    private Integer id;
    private String content;

    private Diary diary;

    public Comment() {
    }
}

 

 

  4.Comment.hbm.xml

 

 

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping default-access="field">

    <class name="com.template.model.Comment" table="comment">
        <id name="id" column="id" type="java.lang.Integer">
            <generator class="native"/>
        </id>
        <property name="content" column="content" type="java.lang.String"/>

        <many-to-one name="diary" class="com.template.model.Diary" column="diaryid"/>
    </class>

</hibernate-mapping>

 

 

  省去Diary与Comment对应的sql语句,相信从Diary.hbm.xml和Comment.hbm.xml映射文件中应该能够知道sql语句是什么样的结构。在comment表中添加了一个diaryid字段来维护Diary与Comment的一对多的关联关系。

 

  如果你只希望从一方能够得到多方,即从一篇日志知道它有哪些评论,而不希望从多方得到一方,即从一条评论无法知道它属于哪篇日志。那么你只需要做一点小小的改动就够了,如下示:

 

  5.Comment.java

 

package com.template.model;

/**
 * Created by IntelliJ IDEA.
 * User: Zhong Gang
 * Date: 11-7-20
 * Time: 下午8:13
 * To change this template use File | Settings | File Templates.
 */
public class Comment {
    private Integer id;
    private String content;

    public Comment() {
    }
}

 

 

  6.Comment.hbm.xml

 

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping default-access="field">

    <class name="com.template.model.Comment" table="comment">
        <id name="id" column="id" type="java.lang.Integer">
            <generator class="native"/>
        </id>
        <property name="content" column="content" type="java.lang.String"/>
    </class>

</hibernate-mapping>
 

  即把diary属性删除即可,但是一定记住不能把comment表中的diaryid字段也删除了,那样Diary与Comment也就不存在一对多的关联了。

1
5
分享到:
评论
3 楼 men2011it 2012-01-20  
2 楼 hanxu341 2011-11-29  
lf6627926 写道
高手  我说的意思能不能 在中间的表中还有出了 两个表的主键外  还有其他的字段  如日期,等等。有好办法吗

同问
1 楼 lf6627926 2011-10-24  
高手  我说的意思能不能 在中间的表中还有出了 两个表的主键外  还有其他的字段  如日期,等等。有好办法吗

相关推荐

    hibernate-examples:Hibernate关联,Hibernate搜索和Hibernate集成

    One To Many Mapping 3. Many To Many Mapping 4. Hibernate Spring integartion 本文中使用的工具和技术 1. Java JDK 7 and above 2. MySQL 5 above 3. Hibernate 4 above 4. Sping 4 above 5. Maven 3.3 ...

    精通hibernate:对象持久化技术孙卫琴第二版part2

    7.1.1 [many-to-one]元素的not-null属性 153 7.1.2 级联保存和更新 155 7.2 映射一对多双向关联关系 156 7.2.1 [set]元素的inverse属性 161 7.2.2 级联删除 163 7.2.3 父子关系 164 7.3 映射一对多双向自身...

    精通Hibernate:对象持久化技术第二版part3

    7.1.1 [many-to-one]元素的not-null属性 153 7.1.2 级联保存和更新 155 7.2 映射一对多双向关联关系 156 7.2.1 [set]元素的inverse属性 161 7.2.2 级联删除 163 7.2.3 父子关系 164 7.3 映射一对多双向自身...

    Pro JPA 2 Mastering the Java Persistence API free down

    JPA2.0 加入了大量必须的 ORM 映射增强特性,包括:支持通过使用 @ElementCollection 标注来增强 collections, maps 和 lists( 这里不是指实体之间的关联关系 ) 集合,支持 map 的单向 one-to-many 关联 (JPA1.0...

    jpa-hibernate-tutorials:带有Spring Boot和Spring-Data-JPA的Hibernate教程

    Spring Boot和JPA的Hibernate教程和演示

    Spring面试题

    类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many、 4. 说下Hibernate的缓存...

    Java学习笔记-个人整理的

    {1.9.6}go-to}{33}{subsection.1.9.6} {1.9.7}\texttt {do-while}}{33}{subsection.1.9.7} {1.10}数组(array)}{34}{section.1.10} {1.10.1}数组变量的声明}{34}{subsection.1.10.1} {1.10.2}数组变量的初始化...

    jdbc基础和参考

    many-to-one:标签中对于cascade的取值delete,delete-orphan,all-delete-orphan(只用unique属性值不为true不能出现)慎用 cascade:级联属性 none:不做任何级联操作 save-update:对当前对象执行save,update, ...

    Java面试宝典2010版

    如何书写一个 one to many 配置文件. 11、iBatis与Hibernate有什么不同? 12、写Hibernate的一对多和多对一双向关联的orm配置? 9、hibernate的inverse属性的作用? 13、在DAO中如何体现DAO设计模式? 14、spring+...

    最新Java面试宝典pdf版

    如何书写一个 one to many 配置文件. 122 11、iBatis与Hibernate有什么不同? 122 12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计模式? ...

    Java面试笔试资料大全

    如何书写一个 one to many 配置文件. 122 11、iBatis与Hibernate有什么不同? 122 12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计模式? ...

    JAVA面试宝典2010

    如何书写一个 one to many 配置文件. 122 11、iBatis与Hibernate有什么不同? 122 12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计模式? ...

    Java面试宝典-经典

    如何书写一个 one to many 配置文件. 122 11、iBatis与Hibernate有什么不同? 122 12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计模式? ...

    java面试题大全(2012版)

    如何书写一个 one to many 配置文件. 122 11、iBatis与Hibernate有什么不同? 122 12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计模式? ...

    Java面试宝典2012版

    如何书写一个 one to many 配置文件. 122 11、iBatis与Hibernate有什么不同? 122 12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计...

    java面试宝典2012

    如何书写一个 one to many 配置文件. 133 11、iBatis与Hibernate有什么不同? 133 12、写Hibernate的一对多和多对一双向关联的orm配置? 134 9、hibernate的inverse属性的作用? 134 13、在DAO中如何体现DAO设计模式? ...

    Java面试宝典2012新版

    如何书写一个 one to many 配置文件. 122 11、iBatis与Hibernate有什么不同? 122 12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计模式? ...

Global site tag (gtag.js) - Google Analytics