`

JPA主键生成策略

    博客分类:
  • JPA
阅读更多

     
          一) 创建实体Bean: 
              public class Person {
               /**
                * 编号
                */
              private Integer id;
               /**
                * 姓名
                */
              private String name; 
               //...get/set方法...
              } 
             以上是普通的Java Bean,如果要用JPA来管理Java Bean就要加上JPA的一些注解。

             import javax.persistence.Entity;
             import javax.persistence.GeneratedValue;
             import javax.persistence.Id;
       
             @Entity
             public class Person {
                      /**
                       * 编号
                       */
                      @Id
                      private Integer id;
                      /**
                       * 姓名
                       */
                      private String name; 
                      //...get/set方法...
              } 
              注解解析:Person类前面用javax.persistence.Entity注解,以javax为开头的包,是sun公司制定的
一些规范,而在Hibernate中也提供了org.hibernate.annotations.Entity注解,JPA实体的注解要选javax.persistence.Entity。@Id注解:在属性上标识,也可以在属性对应的get方法上标识,如

@Id

public Integer getId()用来标志实体的唯一标识。
   
               JPA实体主键生成策略,在不同数据库中有些是不支持的:
               1)
               @Id
               @GeneratedValue(strategy=GenerationType.AUTO)
               自动选择一个最适合底层数据库的主键生成策略。如MySQL会自动对应auto increment。这个是默认选
项,即如果只写@GeneratedValue,等价于@GeneratedValue(strategy=GenerationType.AUTO)。
      
                2)
                @Id
                @GeneratedValue(strategy=GenerationType.IDENTITY)
                表自增长字段,Oracle不支持这种方式(MySQL数据库支持)。

                3)
                @Id
                @GeneratedValue(strategy=GenerationType.SEQUENCE)
                通过序列产生主键,MySQL不支持这种方式(Oracle数据库支持)。

                4)
                @Id
                @GeneratedValue(strategy=GenerationType.TABLE)
                通过表产生主键,框架借由表模拟序列产生主键,使用该策略可以使应用更易于数据库移植。不同的
JPA实现商生成的表名是不同的,如 OpenJPA生成openjpa_sequence_table表,Hibernate生成一个hibernate_sequences表,而TopLink则生成sequence表。这些表都具有一个序列名和对应值两个字段,如SEQ_NAME和SEQ_COUNT。

                在我们的应用中,一般选用@GeneratedValue(strategy=GenerationType.AUTO)这种方式,自动选择主

键生成策略,以适应不同的数据库移植。

                在此例中用的是MySQL数据库,用自动选择的主键生成策略。

                import javax.persistence.Entity;
                import javax.persistence.GeneratedValue;
                import javax.persistence.Id;
       
                @Entity
                public class Person {
                /**
                  * 编号
                  */
                @Id @GeneratedValue(strategy=GenerationType.AUTO)
                private Integer id;
                /**
                 * 姓名
                 */
                private String name; 
                //...get/set方法...
                }  
                二)在类路径的META-INF目录下放置persistence.xml填写相关信息

                三)编写单元测试
    
                import javax.persistence.EntityManager;
                import javax.persistence.EntityManagerFactory;
                import javax.persistence.Persistence;
 
                public class PersonTest {

 

                public static void main(String[] args) {

 

                          //sample是persistence.xml中

                          //persistence-unit标签name名称
                          EntityManagerFactory factory =  Persistence.createEntityManagerFactory("sample");
                          EntityManager em = factory.createEntityManager();
                          em.getTransaction().begin();
                          em.persist(new Person("JPA测试"));
                          em.getTransaction().commit();
                          em.close();
                          factory.close();
                  }
                  }

                         可以看到,在MySQL数据库中创建了person表,主键为id是自增长类型。添加的记录为:id:1;name:JPA测试。 

 


 

 

分享到:
评论

相关推荐

    04_JPA详解_第一个JPA实例与JPA主键生成策略.zip

    04_JPA详解_第一个JPA实例与JPA主键生成策略.zip

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

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

    04_传智播客JPA详解_第一个JPA实例与JPA主键生成策略

    04_传智播客JPA详解_第一个JPA实例与JPA主键生成策略

    JPA详解视频教程 第4讲 第一个JPA实例与JPA主键生成策略.avi

    JPA用于整合现有的ORM技术,可以简化现有Java EE和Java SE应用对象持久化的开发工作,实现ORM的统一。JPA详解视频教程 第4讲 第一个JPA实例与JPA主键生成策略.avi

    JPA环境搭建及JPA实例与JPA主键生成策略

    NULL 博文链接:https://1028826685.iteye.com/blog/1523349

    JPA主键策略(针对数据库自增字段重置后无效检查项)

    JPA主键策略(针对数据库自增字段重置后无效检查项) JPA主键生成策略会影响数据库自增字段的重置

    持久化类主键生成策略+例子

    持久化类主键生成策略+例子 jpa 4种 hibernate 13种

    真实项目中关于主键生成方式的剖析(JPA)

    本资源为原创. 其中剖析了hibernate+JPA对主键的生成方式的分类,以及在真实项目中如何使用,并且剖析各种数据库间的主键序列(sequence)原理以及使用.

    尚硅谷JPA视频教程

    JPA视频_Table主键生成策略 · 7. JPA视频_EntityManager(1) · 8. JPA视频_EntityManager(2) · 9. JPA视频_EntityManager(3) · 10. JPA视频_EntityManager(4) · 11. JPA视频_EntityTransaction · 12. ...

    持久化对象的标准JPA

    基于JPA的Demo,包含关联(一对多等等),继承,主键(组合主键,主键生成策略),注解,基本类型的实现。

    第25章_JPA概述.

    29.1主键生成策略 29.2 复合主键 29.3嵌入式主键 29.4 一对一关系的配置和使用 29.5 多对一和一对多关系的配置和使用 29.6 多对多的关系 29.7 把查询的多个值封装成对象 29.8 批量更新和删除 29.9 使用存储过程 29....

    根据表结构生成JavaBean,史上最强最专业的表结构转JavaBean的工具(第6版)

    5、新增实体主键生成策略,可以配置手动生成主键也可以配置自动生成主键。 6、可以根据选择的标准模板不同自动生成相应扩展名的文件,也可以手动设置文件扩展名。 7、新增设置文件注释,并可以使用部分系统参数。...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    10.4.4 映射实体类的主键 398 10.5 关联关系映射 402 10.5.1 单向N-1关联 403 10.5.2 单向1-1关联 406 10.5.3 单向1-N关联 409 10.5.4 单向N-N关联 411 10.5.5 双向1-1关联 414 10.5.6 双向1-N关联 417 10.5.7...

    Hibernate注解

    * name 表示该表主键生成策略名称,它被引用在@GeneratedValue中设置的“gernerator”值中 * sequenceName 表示生成策略用到的数据库序列名称。 * initialValue 表示主键初始值,默认为0. * allocationSize 每次主键...

    Hibernate实战(第2版 中文高清版)

     1.4.4 Hibernate、EJB 3和JPA简介   1.5 小结   第2章 启动项目   2.1 启动Hibernate项目   2.1.1 选择开发过程   2.1.2 建立项目   2.1.3 Hibernate配置和启动   2.1.4 运行和测试应用程序   2.2...

    Spring中文帮助文档

    11.5.2. 使用SimpleJdbcInsert来获取自动生成的主键 11.5.3. 指定SimpleJdbcInsert所使用的字段 11.5.4. 使用SqlParameterSource提供参数值 11.5.5. 使用SimpleJdbcCall调用存储过程 11.5.6. 声明SimpleJdbcCall...

    Spring API

    11.5.2. 使用SimpleJdbcInsert来获取自动生成的主键 11.5.3. 指定SimpleJdbcInsert所使用的字段 11.5.4. 使用SqlParameterSource提供参数值 11.5.5. 使用SimpleJdbcCall调用存储过程 11.5.6. 声明SimpleJdbcCall...

    Hibernate注释大全收藏

    @Id 注解可将实体Bean中某个属性定义为主键,使用@GenerateValue注解可以定义该标识符的生成策略。 • AUTO - 可以是 identity column, sequence 或者 table 类型,取决于不同底层的数据库 • TABLE - 使用table...

Global site tag (gtag.js) - Google Analytics