`
suhuanzheng7784877
  • 浏览: 704025 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
Ff8d036b-05a9-33b5-828a-2633bb68b7e6
读金庸故事,品程序人生
浏览量:47744
社区版块
存档分类
最新评论

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

阅读更多

1.       前言

感觉JPA关联映射实现感觉比Hibernate配置文件的关联映射几乎一样,只是引入了“零配置”这个概念。劣者自己在做一个东西的时候用到了关联映射,在此将它做一个总结。留给自己回顾用。

2.       需求

现在遇到这么一个简单的需求,要求做一个小小的用户权限管理系统。不同的系统人员属于不同的角色组,不同的角色组有不同的操作权限(细粒度:显示不同的操作菜单)。那么基于以上需求可以得出这样的业务图。



 

 

 

1.       建模

从以上业务图我们不难得出以下模型。

UxAdmin:代表用户

UxRole:代表角色组

UxSysMenu:代表系统菜单

得出相关类图如下

UxAdmin(用户)



 

可以看出里面有一个Set<UxRole>,代表角色实体不能重复,当然判断UxRole是否重复的算法需要在UxRole里自己实现,此为后话暂且不表。

UxRole(角色)



 

在角色实体中,含有Set<UxAdmin>Set<UxSysMenu>。也就是说角色相当于用户和菜单的一个中间桥梁,根据用户找到用户的角色,再根据角色才能找到该用户能使用的操作菜单。并且角色组下的用户和菜单都不能重复。

UxSysMenu(菜单)



 其中Set<UxRole>是菜单实体到角色的映射。

1.       实体类代码

有了类图,就有了实体类代码了。

UxAdmin

 

package module.system.vo;

 

import java.util.Set;

 

import javax.persistence.CascadeType;

import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.FetchType;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import javax.persistence.Id;

import javax.persistence.JoinColumn;

import javax.persistence.JoinTable;

import javax.persistence.ManyToMany;

import javax.persistence.Table;

 

import org.apache.struts2.json.annotations.JSON;

 

 

/**

 * liuyan

 */

@Entity

@Table(name = "ux_admin")

public class UxAdmin implements java.io.Serializable {

 

    // Fields

    private Integer id;

    private String admin;

    private String password;

    private Set<UxRole> roles;

 

    // Constructors

 

    /** default constructor */

    public UxAdmin() {

    }

 

    /** minimal constructor */

    public UxAdmin(Integer id) {

       this.id = id;

    }

 

    /** full constructor */

    public UxAdmin(Integer id, String admin, String password) {

       this.id = id;

       this.admin = admin;

       this.password = password;

    }

 

    // Property accessors

    @Id

    @GeneratedValue(strategy = GenerationType.AUTO)

    @Column(name = "id", unique = true, nullable = false)

    public Integer getId() {

       return this.id;

    }

 

    public void setId(Integer id) {

       this.id = id;

    }

 

    @Column(name = "admin", length = 32)

    public String getAdmin() {

       return this.admin;

    }

 

    public void setAdmin(String admin) {

       this.admin = admin;

    }

 

    @Column(name = "password", length = 32)

    public String getPassword() {

       return this.password;

    }

 

    public void setPassword(String password) {

       this.password = password;

    }

 

    @JSON(serialize = false)

    @ManyToMany(fetch = FetchType.LAZY)

    @JoinTable(name = "ux_sys_user_role", joinColumns = { @JoinColumn(name = "adminId") }, inverseJoinColumns = { @JoinColumn(name = "roleId") })

    public Set<UxRole> getRoles() {

       return roles;

    }

 

    public void setRoles(Set<UxRole> roles) {

       this.roles = roles;

    }

 

}

说明1:不要理睬getRoles()@JSON(serialize = false)注解,这个和JPA无关

说明2@ManyToMany(fetch = FetchType.LAZY)注解,说明UxAdminUxRole是多对多的关系,采用的是默认的懒加载机制,而且从UxRole来看,是双向的多对多关联。所以必须采用专门的维护关系表来维护多对多关联关系。

说明3@JoinTable(……)注解,利用表名为ux_sys_user_role作为关系维护表。UxAdmin实体表用字段adminId作为ux_sys_user_role的外键,用于维护UxAdmin实体。roleId是维护另一个实体——UxRoleroleId字段。之所以用Set作为集合关联,是因为需求不能让用户的角色重复。inverseJoinColumns定义指向非所有者主表的外键列。

 

  • 大小: 66.2 KB
  • 大小: 32.2 KB
  • 大小: 45.9 KB
  • 大小: 63.9 KB
分享到:
评论

相关推荐

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

    本篇笔记主要聚焦于JPA的关联映射,这是JPA中一个重要的概念,用于定义实体之间的关系。 关联映射允许我们将数据库中的表关系映射到Java对象的关联上。在Hibernate中,这些关系通常通过XML配置文件来定义,而在JPA...

    JPA学习笔记-EJB-02JPA属性注解

    ### JPA学习笔记-EJB-02JPA属性注解 #### 一、引言 在上一篇文章中,我们简要介绍了Java Persistence API (JPA)的基础知识,包括它的基本部署和操作流程,从而让我们对JPA有了初步的认识。本文将继续深入探讨JPA的...

    JPA学习文档笔记

    ### JPA学习文档知识点概述 #### 1. JPA简介 - **定义**: JPA (Java Persistence API) 是由Sun官方提出的一种Java持久化规范,旨在简化Java应用程序中关系型数据库的操作过程。其核心目标是统一现有的ORM (Object-...

    jpa学习笔记

    ### JPA 学习笔记详解 #### 一、JPA 概述 Java Persistence API (JPA) 是 Sun 公司提出的一种 Java 持久层标准,它为 Java 开发者提供了一种对象关系映射 (ORM) 的工具来管理 Java 应用程序中的关系型数据。JPA ...

    spring 使用 Jpa的笔记

    总结来说,本文档涵盖了Spring JPA的基础配置和使用方法,包括所需的依赖库、持久化配置文件`persistence.xml`的编写、实体类的定义以及实体间关系的映射。通过这些知识点的学习,可以更好地理解和掌握Spring JPA的...

    ejb学习笔记

    在深入探讨《ejb学习笔记》这一主题之前,我们首先需要理解什么是EJB(Enterprise JavaBeans)。EJB是Java平台为企业级应用开发提供的一套组件模型,它属于J2EE(Java 2 Platform, Enterprise Edition)的一部分,...

    ejb 学习笔记4

    ### EJB学习笔记4:深入理解实体与JPA #### 实体的概念与作用 实体,在企业级Java开发中,特别是EJB(Enterprise JavaBeans)框架下,指的是具有持久化能力的POJO(Plain Old Java Object)类。不同于实体Bean...

    EJB3.0 - 学习笔记

    EJB 3.0 版本引入了许多改进,简化了API,降低了学习曲线,使其更易于使用。 在MVC(模型-视图-控制器)架构中,EJB 主要用于开发业务层。它负责处理数据和业务逻辑,而视图层则展示数据,控制器则协调视图和模型...

    EJB3.0 学习笔记

    **EJB3.0 学习笔记** EJB(Enterprise JavaBeans)是Java EE平台中的核心组件,用于构建可扩展的、安全的、事务处理的分布式应用程序。EJB3.0是EJB的一个重大更新,引入了许多改进,使得开发过程更为简化,降低了...

    j2ee笔记--很有用的东西

    7. **JPA(Java Persistence API)**:JPA是Java标准的持久化框架,简化了对象关系映射,使得Java对象可以直接与数据库进行交互。 8. **JSF(JavaServer Faces)**:JSF是一种MVC(Model-View-Controller)框架,...

    EJB概述 学习笔记

    1. **EJB组件类型** - **会话bean(Session Beans)**:代表单个客户端的交互,并且可以是无状态或有状态的。无状态会话bean在处理完请求后不会保留任何信息,而有状态会话bean则可以记住客户端的状态。 - **实体...

    EJB学习笔记.rar

    从最初的EJB 1.0到EJB 2.x,再到EJB 3.0,其复杂性和学习曲线逐渐降低。EJB 3.0引入了注解,极大地简化了代码,并且与JPA、JSF等其他Java EE技术更好地集成。最新的EJB 3.2版本继续优化了API,提高了开发效率。 **...

    达内培训的ejb课程笔记

    在"达内培训的ejb课程笔记"中,学习者可能涵盖了以下内容: 1. EJB的基础概念和架构。 2. 如何创建和部署EJB组件,包括编写bean的类、接口、XML配置文件等。 3. EJB的生命周期管理,包括实例化、初始化、激活、钝化...

    javaEE学习笔记

    本学习笔记涵盖了JavaEE的核心技术,帮助学习者深入理解和掌握javaweb的各项技能。 1. **Servlet与JSP** - **Servlet**:Servlet是Java编写的服务器端程序,主要用于扩展服务器的功能。在JavaEE中,Servlet处理...

    JavaEE5学习笔记01-JTA和数据库事务

    ### JavaEE5学习笔记01-JTA和数据库事务:深入解析与应用 #### 一、JavaEE5概览与核心组件 JavaEE5是Java Enterprise Edition的第五个版本,标志着企业级Java应用的一个重要里程碑。它引入了一系列重要的新特性,...

    达内EJB3.0总结

    2. **实体Bean的简化**:EJB3.0引入了JPA(Java Persistence API),这使得实体Bean的处理更加简单,开发者可以通过注解直接将Java类映射到数据库表,而无需编写繁琐的DAO层代码。 3. **无容器依赖的POJOs**:EJB...

Global site tag (gtag.js) - Google Analytics