`
superjavason
  • 浏览: 109493 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

EJB3实体一对多关联问题

    博客分类:
  • EJB3
阅读更多
重新做起EJB3的实体bean,觉得最难的还是一对多的关联问题,

1.单向一对多关系 即使用OneToMany(),在自动建表时除了两张实体表,还会建一张关联表,但一般的一对多关联其实是不需要关联表的
2.双向一对多关系 即使用了OneToMany和ManyToOne(mappedName="name")时,自动建表不会多建关联表,似乎更符合我们的需求
3 删除双向一对多关系 以相册和照片的一对多关系为例。
Photo photo = em.find(Photo.class, photoID);
        //判断album是否在持久环境中,如果是,则删除他们的关联关系,
         //否则在接下来的查询中,可能还会查出删除的相片...
        album = photo.getAlbum(); 
        if(em.contains(album)){
            album.getPhotos().remove(photo);
        }
  //这是删除Photo的记录,但也并不是马上会更新数据库
  em.remove(photo);


4.单向一对多关系 我觉得比较麻烦,如果album还在persistence context中的话,可能要先找出Album对象,删除他们的关联,否则下次查询也会出现类似同步的问题。
//如果只是这样,如果这个photo的album还在persistence context 中,
//那em.find(Album.class,albumID)会不能同步。
Photo photo = em.find(Photo.class,photoID);
em.remove(photo);


//使用find()方法,即使fetch设为EAGER,也不会获取相册下的photos,
//Album album = em.find(Album.class,albumID);

//如果fetch不设为EAGER,那么下面的sql 还需加上LEFT JOIN FETCH  a.photos
String sql = "SELECT a FROM Album a WHERE a.id = "+albumID;
query = em.createQuery(sql);
Album album = (Album)query.getSingleResult();
album.getPhotos().remove(photo);
Photo photo = em.find(Photo.class,photoID);
em.remove(photo);
分享到:
评论

相关推荐

    EJB3开发Entity

    EJB3支持一对多(@OneToMany)、多对一(@ManyToOne)、一对一(@OneToOne)和多对多(@ManyToMany)的关系映射,通过注解来定义实体之间的关联。 9. **懒加载和即时加载** EJB3支持懒加载和即时加载策略,控制...

    EJB3一对一关系映射实例

    总结一下,EJB3的一对一关系映射是通过注解来实现的,它允许实体之间建立一对一的关联。通过Ext2和Ext2.0这样的扩展,开发者可以进一步定制和增强EJB3的功能。理解这些概念并熟练运用,将有助于构建健壮、高效的企业...

    EJB3多对多关系映射实例

    本实例将聚焦于EJB3中的多对多关系映射,这是数据库设计中常见的关系类型,常用于描述两个实体之间复杂的关系,如用户与角色、商品与类别等。 在Java世界中,我们通常使用JPA(Java Persistence API)和其实现如...

    EJB 一对一 一对多 多对多 的代码

    在EJB中,关系映射是数据模型的重要部分,主要包括一对一(OneToOne)、一对多(OneToMany)和多对多(ManyToMany)这三种关系类型。下面将详细阐述这些关系及其在EJB中的实现。 ### 一对一(OneToOne)关系 一对...

    13_jpa多对多双向关联实体定义与注解

    "13_传智播客JPA详解"系列教程涵盖了JPA的诸多方面,而"13_传智播客JPA详解_JPA中的多对多双向关联实体定义与注解设置"这一部分则专门聚焦于多对多关联的实践。 在关系型数据库中,多对多关联是最为复杂的一种关系...

    Jboss下开发ejb应用之一实体bean的应用

    如果需要处理一对一、一对多或多对多的关系,可以使用`@OneToOne`、`@OneToMany`、`@ManyToOne`或`@ManyToMany`注解。 在EJB项目中,还需要定义一个本地接口(Local Interface),它是客户端与实体Bean交互的接口,...

    EJB3持久化

    更复杂的映射可能涉及到一对一、一对多、多对多的关系映射。 - **手动和自动化映射**:开发者可以选择手动编写映射代码,或者使用像Hibernate这样的ORM工具,它们可以自动解析注解或XML配置文件,自动生成必要的...

    EJB3.0实体的注解规范

    EJB3.0实体的注解规范主要涵盖了Java企业版(Java EE)中实体Bean的定义方式,这一规范也适用于Java Persistence API (JPA),并且整合了Hibernate的特有扩展。在EJB3.0中,实体Bean被设计为简单的Plain Old Java ...

    Myeclipse+JBoss开发的EJB3.0 一对多程序

    在EJB3.0和Java EE中,"一对多"关系指的是一个实体对应多个关联实体的关系。比如,一个学生可以有多个课程,一个部门可以有多名员工。在数据库设计中,这通常通过外键来实现。在EJB3.0中,我们可以使用@OneToMany或@...

    JPA学习笔记-EJB-04JPA关联映射总结

    2. `@OneToMany`:一对多关系,一个实体可以有多个相关联的实体。 3. `@ManyToOne`:多对一关系,多个实体对应另一个实体的单一实例。 4. `@ManyToMany`:多对多关系,多个实体可以关联多个其他实体,通常需要一个...

    EJB白皮书EJB白皮书

    2. **关系映射**:JPA支持一对一、一对多、多对一和多对多的关系映射,使得数据间的关联关系能够透明地处理。 3. **查询语言**:JPA提供了一种基于Java的查询语言(JPQL),类似于SQL,但面向对象,用于检索和操作...

    EJB 3.0学习之实体Bean

    `@OneToMany`注解用于表示实体Bean之间的多对一或一对多关系,如学生和课程成绩的关系。这种关系在EJB 3.0中必须是双向的,意味着每一个多的一方都对应一个一对一的反向关联。 `@OneToMany`注解还包含`targetEntity...

    Myeclipse+JBoss开发的EJB3.0 多对多程序

    "Myeclipse+JBoss开发的EJB3.0 多对多程序" 是一个基于Java EE平台的课程实验,利用EJB3.0(Enterprise JavaBeans 3.0)规范和Myeclipse集成开发环境,以及JBoss应用服务器,实现了数据模型中的多对多关联关系。...

    EJB多对多关系实习

    多对多关系是指两个实体之间存在复杂的关系,每个实体都可以与多个其他实体关联,反之亦然。在EJB 3.0中,这种关系通过使用JPA(Java Persistence API)和注解来配置。下面我们将深入探讨这个话题。 首先,我们需要...

    ejb+hibernate资料 ejb+hibernate资料

    `Hibernate 基础1.ppt`可能涵盖Hibernate的基本用法,如实体类的定义、属性注解、一对一、一对多、多对多的关联映射,以及如何通过Hibernate API进行CRUD操作(创建、读取、更新、删除)。此外,还可能介绍到HQL...

    JPA 批注参考 EJB3.0实体Bean注解详细解析

    15. **@SecondaryTable** - 用于指定一个实体映射到多个表时,除了主表之外的辅助表。 #### 三、配置实体的示例 - 使用 `@Entity` 和 `@Table` 批注定义实体和数据库表的映射关系。 - 使用 `@Id` 和 `@...

    EJB3.0中文文档

    描述两个实体Bean之间的一对多或多对一关系,包括外键、关联表等方式。 **3.8.2 单向一对多** 描述一个实体Bean可以拥有多条记录的情况。 **3.8.3 单向多对一** 描述多条记录属于一个实体Bean的情况。 **3.8.4 ...

Global site tag (gtag.js) - Google Analytics