- 浏览: 390860 次
- 性别:
- 来自: 昆明
文章分类
- 全部博客 (198)
- java (28)
- J2EE (19)
- struts (33)
- sping (13)
- hibernate (18)
- mybatis (15)
- connection pool (3)
- DB (26)
- SQL (21)
- html (13)
- js (7)
- json (3)
- jquery (2)
- document (17)
- linux (15)
- C# (1)
- url (2)
- eweb4j (1)
- Turbine (1)
- 框架 (11)
- jdbcTemplate (3)
- aop (2)
- windows (2)
- ubuntu (1)
- eclipse (11)
- JPA (8)
- svn (4)
- get 传值 (2)
- mysql (5)
- oracle (2)
- hadoop (1)
- MongoDB (2)
- spring (1)
- python (1)
最新评论
-
jcbingjc:
楼主,你好,按照上面的配置,我报如下错误:Missing Pe ...
[properJavaRDP]在网页中实现远程连接 -
sucful:
折腾了半天跑不通 ,要传就搞个完整的吧
Struts2 <sx:div/>实现页面模块异步刷新 -
Kattou:
你好! 看了你写的这个分页 感觉很好, 但是不怎么会用么,请指 ...
jsp分页控件 -
我叫PSB:
地址完全用不了
eclipse中的安装 jseclipse -
1111emotion:
我的工程里还是有乱码的情况,我该改的地方都改了。
Eclipse/MyEclipse更改默认字符集 设置UTF-8
将当前主键的值单独保存到一个数据库的表中,主键的值每次都是从指定的表中查询来获得,这种生成主键的方式也是很常用的。这种方法生成主键的策略可以适用于任何的数据库,不必担心不同数据库不兼容造成的问题。
使用以下SQL脚本创建一个表“tb_generator”,并插入两条数据,SQL脚本如下所示。
CREATE TABLE tb_generator (
id int(20) unsigned NOT NULL auto_increment,
gen_name varchar(255) NOT NULL,
gen_value int(20) NOT NULL,
PRIMARY KEY (id)
)
INSERT INTO tb_generator ( gen_name ,gen_value ) VALUES ( 'CUSTOMER_PK',1);
INSERT INTO tb_generator ( gen_name ,gen_value ) VALUES ( 'CONTACT_PK',100);
执行SQL语句后,表中的数据如图5.1所示。
图5.1 自动生成主键表tb_generator
现在有另外两个表customer和contact,它们每次新建记录时生成主键的值分别“CUSTOMER_PK”所对应的value值加1,“CONTACT_PK”所对应的value值加1。
下面就来具体看一下如何来配置主键的生成策略,以配置“customer”表为例,步骤如下。
(1)在Entity标记主键的位置,指定主键生成策略为“GenerationType.TABLE”,具体设置如下。
@Entity
@Table(name = "customer")
public final class CustomerEO implements java.io.Serializable {
private Integer id;
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
}
(2)指定生成主键策略的名称,例如这里命名为“customer_gen”。
@Id
@GeneratedValue(strategy = GenerationType.TABLE,generator="customer_gen")
public Integer getId() {
return this.id;
}
(3)使用@ TableGenerator标记定义表生成策略的具体设置,代码如下所示。
@Id
@GeneratedValue(strategy = GenerationType.TABLE,generator="customer_gen")
@TableGenerator(name = "customer_gen",
table="tb_generator",
pkColumnName="gen_name",
valueColumnName="gen_value",
pkColumnValue="CUSTOMER_PK",
allocationSize=1
)
public Integer getId() {
return this.id;
}
这样,当通过以下代码创建新的实体后,表tb_generator中“CUSTOMER_PK”的value的值将自动加1,如图5.2所示。
CustomerEO customer = new CustomerEO();
customer.setName("Janet");
customer.setShortName("Jane");
entityManager.persist(customer);
图5.2 添加新数据后表tb_generator
(4)@TableGenerator标记用于设置主键使用数据表生成主键的策略,它的定义如下所示。
@Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME)
public @interface TableGenerator {
String name();
String table() default "";
String catalog() default "";
String schema() default "";
String pkColumnName() default "";
String valueColumnName() default "";
String pkColumnValue() default "";
int initialValue() default 0;
int allocationSize() default 50;
UniqueConstraint[] uniqueConstraints() default {};
}
在使用此@ TableGenerator标记时,需要注意以下几个问题。
l 该标记可以在类名、方法名、和属性名前。并且一旦在实体中标记,它不仅可以在本实体中使用,在其他的实体中也可以引用。它的作用范围是整个persist unit配置的实体类中。
例如以上的定义也可以写成:
@Entity
@Table(name = "customer")
@TableGenerator(name = "customer_gen",
table="tb_generator",
pkColumnName="gen_name",
valueColumnName="gen_value",
pkColumnValue="CUSTOMER_PK",
allocationSize=1
)
public class CustomerEO implements java.io.Serializable {
……
}
或者将其标注在ContactEO中,也是可以的。但建议标注在所作用的实体中,这样有助于方便查看。
l name属性表示该表主键生成策略的名称,它被引用在@GeneratedValue中设置的“generator”值中。
l table属性表示表生成策略所持久化的表名,例如,这里表使用的是数据库中的“tb_generator”。
l catalog属性和schema具体指定表所在的目录名或是数据库名。
l pkColumnName属性的值表示在持久化表中,该主键生成策略所对应键值的名称。例如在“tb_generator”中将“gen_name”作为主键的键值
l valueColumnName属性的值表示在持久化表中,该主键当前所生成的值,它的值将会随着每次创建累加。例如,在“tb_generator”中将“gen_value”作为主键的值
l pkColumnValue属性的值表示在持久化表中,该生成策略所对应的主键。例如在“tb_generator”表中,将“gen_name”的值为“CUSTOMER_PK”。
l initialValue表示主键初识值,默认为0。
l allocationSize表示每次主键值增加的大小,例如设置成1,则表示每次创建新记录后自动加1,默认为50。
l UniqueConstraint与@Table标记中的用法类似,请读者参阅5.2.1小节。
用一个简单示意图表示持久化主键表和表生成策略,如图所示。
发表评论
-
Hibernate one-to-many 属性设置
2012-03-26 16:49 1271使用Hibernate提供的one-to-many来实现 ... -
struts2 result type 介绍
2012-03-23 09:14 1095在默认时,<result>标签的type属性值是“ ... -
cannot simultaneously fetch multiple bags异常的解决
2012-03-15 16:18 2374原文来自于http://howsun.bl ... -
JPA 实现继承关系
2012-03-15 03:14 3329JPA支持继承关系,使开发者可以利用继承的思想建模。 ... -
EntityManager
2012-03-13 14:23 1185EntityManager ma ... -
EJB3 JPA JPQL 语句 查询 使用 函数 分页 子查询(2)
2012-03-03 16:50 1695关联(join) JPQL仍然支持和SQL中类似的 ... -
Struts2整合Spring、JPA
2012-02-27 09:46 1875一直觉得JPA很神秘,最近抽空看了下,下面贴出刚才做的St ... -
JPA查询语言之EJBQL+JPQL
2011-11-30 13:30 5010简单查询 返回所有Topic对象的记录: SELECT ... -
spring mvc 配置
2011-11-28 14:14 13821、/WEB-INF/web.xml <ser ... -
spring jdbcTemplate调用存储过程
2011-11-27 21:36 1404第一种方式: List<Map<String,Ob ... -
spring3之JdbcTemplate AOP 事务
2011-11-27 01:36 7410一、applicationContext.xml配置:定义事务 ... -
spring3之JdbcTemplate详解
2011-11-27 01:36 33741、JdbcTemplate操作数据库 Spring ... -
JAVA三大框架的各自作用
2011-11-25 00:04 3148一、Spring Spring是 ... -
Turbine 框架介绍
2011-11-26 00:16 2211Jakarta Turbine 可能大家不是非常熟悉,但是它是 ... -
使用SSH到底是为了快速开发,还是为了标准?
2011-11-25 00:00 2424使用SSH到底是为了快速开发,还是为了标准? 使用S ... -
Struts2、Spring、Hibernate 高效开发的最佳实践
2011-11-26 00:16 1222引言 SSH(Struts2+Spring+Hi ... -
SiteMesh模板应用与struts2整合
2011-11-23 09:23 1698SiteMesh是一个非常优秀 ... -
hibernate 的createSQLQuery的几种用法
2011-11-08 08:06 1014使用SQLQuery 对原生SQL查询执 ... -
Hibernate执行sql语句
2011-11-08 08:06 1371Hibernate执行sql语句 : BasicServi ... -
Hibernate 插入,修改,删除,查询语句
2011-11-08 08:07 3624Hibernate 语法: Hiberna ...
相关推荐
1、基于SpringBoot+Thymeleaf+JPA的博客系统源码.zip 2、该资源包括项目的全部源码,下载可以直接使用! 3、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 ...
JPA代码生成器 1.生成domain dao ,service, mvc文件 2.对应的框架有JPA,spring MVC ,HIBERNATE 3.默认文件生成目录在D:\CODEGEN,直接修改工程源码即可 4.运行方法:JDBCCodeGenerator ,修改public static void ...
SpringBoot整合JPA实现自动创建数据库表自动建表,JPA逆向生成数据库表 运行环境 jdk8+tomcat9+mysql+IntelliJ IDEA+maven 项目技术(必填) springboot+jpa 数据库文件(可选) 新建一个test的数据库即可,表在...
drools-persistence-jpa-5.2.0.Final.jar drools
仓库管理系统,SpringBoot+Spring Data JPA+.....
04_JPA详解_第一个JPA实例与JPA主键生成策略.zip
管理系统系列--仓库管理系统,SpringBoot+Spring Data JPA+.....
java运行依赖jar包
总结一下关于JPA的主键生成策略,JPA是用@GeneratedValue标记来注释的。...2. TABLE:自定义表生成器 3. Identity:像MS SQL支持Identity字段的生成主键策略 4. Sequence:像Oracle支持Sequence的生成主键策略
jbpm-persistence-jpa-5.1.0.Final.jar jbpm5
spring-data-jpa-1.3.0.RELEASE.zip
spring-data-jpa-1.4.3.RELEASE.jar
15_JPA详解_JPA中的联合主键.zip 15_JPA详解_JPA中的联合主键.zip
Apress.Pro.JPA.2.2nd.Edition.Oct.2013
JPA中的常用方法.docx
Apress.Pro.JPA.2.in.Java.EE.8.An.In-Depth.Guide.to.Java.Persistence.APIs.3rd.Edition.
测试通过,集成了spirng MVC4+data jpa+spring Security pom.xml