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

JPA学习笔记-EJB-03JPA主键生成策略总结--1

阅读更多

总结一下关于JPA的主键生成策略,JPA是用@GeneratedValue标记来注释的。一般的我把主键生成分成两大类。第一个就是简单的单字段主键类型,一个就是复杂的复合主键类型。我们分2种情况分别讨论。

第一种单字段主键类型,看上去简单,无非就是一个id字段呗,实际上这个主键字段在JPA,还有任何的ORM框架中都是有很多种生成策略的。

一般是如下4种:

1.       AUTO:自动自增生成

2.       TABLE:自定义表生成器

3.       Identity:像MS SQL支持Identity字段的生成主键策略

4.       Sequence:像Oracle支持Sequence的生成主键策略

 

1:自动生成主键AUTO

       AUTO是默认的主键生成策略,使用了AUTO策略,JPA会根据不同的数据库类型来实现自增策略。比如MySql的表主键是自增1的,那么此策略就会按照数据库的自增1策略,每次插入数据库记录的时候都会自增1Java代码片段如下:

    @Id

    @GeneratedValue(strategy=GenerationType.AUTO)

    private Integer id;

2:自定义表生成器TABLE

       自定义表生成器是在数据库中再建立一张新的表,这张表不是业务表,而是一张特殊表,这张表是专门用来管理整个数据库的主键的具体值的。在数据库中建立一张表如下图所示:

 那么相应的Java片段如下所示:

    @Id

    @GeneratedValue(strategy = GenerationType.TABLE, generator = "myTablePK")

    @TableGenerator(

           name = "myTablePK",

           table = "tb_pk",

           pkColumnName = "table_PK_name",

           pkColumnValue = "tb_contact_pk",

           valueColumnName = "table_PK_value",

           allocationSize = 1)

    private Integer id;

下面对@TableGenerator标记的属性说明一下:

Name:引用@GeneratedValue里面的generator的值

Table:数据库中专门用于生成主键的特殊表的表名

pkColumnNametb_pk表中哪个字段代表了被服务(需要生成主键表)的表名

valueColumnName:指定此辅助表的哪个字段存储了主键的具体值

pkColumnValue:指明一个主键名称,依靠这个名称可以在这张特殊表中找到唯一的table_PK_value的值,而这个值就是具体的主键值。换句话说,数据库有几个业务表,这张表就应该有几条记录才对(除去复合主键的情况)

allocationSize:代表自增数

下面自己再写一个测试方法,这次注释掉主键set那一句,代码如下:

/**

     * 保存ContactEO实体单元测试

     *

     * @throws NamingException

     */

    public void test03() throws NamingException {

 

       // 建立实体

       ContactEO contactEO = new ContactEO();

      

       //注释掉主键这句话

       //contactEO.setId(2);

 

       contactEO.setName("测试主键table策略");

 

        contactEO.setMessage("表策略");

 

       contactEO.setEmail("suhuanzheng77848@163.com");

 

       contactEO.setPrice(9999999911.12);

 

       // byte属性的赋值

       try {

 

           // 读取本机一个文件

           File file = new File("c://22.jpg");

           if (file != null) {

              FileInputStream fis = new FileInputStream(file);

              if (fis != null) {

                  int len = fis.available();

                  byte[] xml = new byte[len];

                  fis.read(xml);

 

                  // 赋值

                  contactEO.setPicture(xml);

              }

           }

 

       } catch (Exception e) {

           e.printStackTrace();

       }

 

       // 获得应用服务上下文

       Context ctx = getInitialContext();

 

       Object object = ctx.lookup("ContactServiceImpl/remote");

 

       // 接口

       IContactService contactService = (IContactService) PortableRemoteObject

              .narrow(object, IContactService.class);

 

       // 调用接口保存方法

       contactService.saveContact(contactEO);

 

    }

执行后,数据库记录如下:

tb_contact记录

 可以看到id=4的是tb_pk表辅助生成的值。

tb_pk表记录如下

 可以看到,tb_pk这张表的table_PK_value的值改变了。

 

 

  • 大小: 54.7 KB
  • 大小: 95.5 KB
  • 大小: 55.5 KB
分享到:
评论

相关推荐

    JPA学习笔记-EJB-03JPA主键生成策略总结

    ### JPA主键生成策略详解 #### 一、概述 持久化对象的主键生成机制在JPA(Java Persistence API)中占据着重要的位置。它不仅关乎数据的唯一标识符如何确定,还与数据的存储效率及应用逻辑紧密相关。JPA通过`@...

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

    在EJB(Enterprise JavaBeans)框架中,JPA被广泛使用,提供了一种面向对象的方式来处理数据库交互。本篇笔记主要聚焦于JPA的关联映射,这是JPA中一个重要的概念,用于定义实体之间的关系。 关联映射允许我们将...

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

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

    JPA学习笔记-EJB-05JPA实体对象状态和实体对象的高级操作

    ### JPA实体对象状态 #### 一、实体对象的状态分类 在Java Persistence API (JPA) 中,实体对象的状态管理是实现数据持久化的基础之一。根据实体对象与实体管理器(EntityManager)之间的交互关系,实体对象可以...

    JavaEE5学习笔记05-EJB之会话Bean总结

    ### JavaEE5学习笔记05-EJB之会话Bean总结 #### EJB(Enterprise JavaBeans)简介 EJB(Enterprise JavaBeans)是Java EE平台的一部分,用于开发和部署可重用的服务组件。EJB规范定义了如何编写、部署以及管理企业...

    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 学习笔记4

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

    ejb学习笔记

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

    EJB3.0 - 学习笔记

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

    EJB3.0 学习笔记

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

    学习EJB3基础知识笔记

    - `@GeneratedValue`: 控制主键生成策略,如自动递增或UUID生成。 3. **会话Bean(Session Beans)**: - `@Stateless`: 无状态会话Bean,适用于不保存客户端上下文的情况,服务器可以自由地复用和销毁实例。 - ...

    EJB学习笔记.doc

    【EJB学习笔记】 EJB,全称为Enterprise Java Beans,是Java平台上的一个标准,用于开发和部署服务器端的分布式组件。它基于Java语言,为创建高效能、安全且可扩展的企业级应用提供了框架。EJB规范由Java ...

    EJB学习笔记.rar

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

Global site tag (gtag.js) - Google Analytics