- 浏览: 240854 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
shangyixue:
受益了
『Hibernate』面对几个错误的解决关键 -
lection.yu:
靠谱。。这个教程可以用
IIS6与Tomcat6 -
lenomon:
找到篇简洁的 IP地址与整数之间的转换
java字符串应用之IP地址转换成整数 -
gaolinwu:
,支持一下
J2EE 13种核心技术 -
tomcat的问题:
多谢多谢
selectmethod=cursor的含义及其使用
将当前主键的值单独保存到一个数据库的表中,主键的值每次都是从指定的表中查询来获得,这种生成主键的方式也是很常用的。这种方法生成主键的策略可以适用于任何的数据库,不必担心不同数据库不兼容造成的问题。
使用以下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小节。
用一个简单示意图表示持久化主键表和表生成策略,如图所示。
使用以下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小节。
用一个简单示意图表示持久化主键表和表生成策略,如图所示。
发表评论
-
JSP和Servlet之间跳转
2012-11-30 11:09 13551)比如从index.jsp页面跳到main文件夹下的list ... -
SpringMVC 中实体类父子类关系设置
2011-08-23 00:03 1523SpringMVC 中实体类父子类关系设置 父类: @E ... -
FreeMarker+struts学习内置函数
2009-06-03 00:42 2241FreeMarker struts2 笔记 它是模板引擎 下 ... -
Spring自动装配(autowire)协作者
2009-05-12 18:11 1674在xml配置文件中,autowire有5种类型,可以在< ... -
java 泛型应用
2008-10-01 23:52 2512在使用 Java™ 语言的泛型时,通配符非常令人困惑,并且最常 ... -
JAVA系统架构技术
2008-09-11 00:20 3696------------------------------- ... -
Java Date 锦囊
2008-08-15 21:21 1077相关文章: java中关于时间日期操作的常用函数 如何 ... -
[转] Java(Web)中相对路径,绝对路径问题总结
2008-07-11 16:44 1152前言: 前一段时间,由于在处理Web应用下的文件创建与移动等 ... -
J2EE中 过滤器应用
2008-07-03 00:41 3366一 页面编码过滤器 1.开发EncodingFilter.j ... -
JAVA date 方法锦囊
2008-06-26 20:50 2290计算某一月份的最大天数 Calendar time=Cale ... -
『转姚博文』提高hibernate性能 很经典
2008-06-24 17:10 1409在一个拥有单独业务层 ... -
Java代码优化,策略与方法
2008-06-22 01:34 1508整理了一些影响性能的代码和优化方法,以后希望能陆续补充和优化 ... -
返回中文unicode的byte字符串
2008-06-22 01:25 1299工作中需要这样的功能,下面是实现代码,比如输入“朋友”,输出/ ... -
『Java代码优化』 尽可能地使用stack(栈)变量(方法内部的局部变量)
2008-06-22 01:18 1396Java程序包含了大量的对象,我们需要了解它们是从哪里被访问的 ... -
『工具手册』正则表达式
2008-06-19 01:07 1182前言 正则表达式是烦琐的,但是强大的,学会之后的应用会让 ... -
『hibernate学习』hibernate最原始的方法取得count(*)
2008-06-18 13:47 1321Hibernate 如何使用count(*) p ... -
JVM内存的设置原理
2008-06-14 21:32 1208本文引用地址: http://cnpoint.com/fram ... -
J2EE 中文乱码攻略
2008-06-14 21:18 1998一.GBK与UTF8的比较 GBK的 ... -
J2EE 13种核心技术
2008-06-14 20:04 2529STEVEN GOULD在文中介绍了J ... -
org.hibernate.MappingException
2008-06-07 18:10 2904org.hibernate.MappingException: ...
相关推荐
JPA代码生成器 1.生成domain dao ,service, mvc文件 2.对应的框架有JPA,spring MVC ,HIBERNATE 3.默认文件生成目录在D:\CODEGEN,直接修改工程源码即可 4.运行方法:JDBCCodeGenerator ,修改public static void ...
jpa代码自动生成工具- 自动生成domain/dao/service/controller
myabtis jpa代码生成器,需要修改部分代码方可使用,项目里面搜main方法
在很多情况下,我们使用Spring-Data- Jpa,一些简单的查询,我们都喜欢用定义方法查询,而不是写JPQL。JPA为我们提供了一组注解:使用Spring-Data- Jpa为我们提供的@EntityGraph,或@EntityGraph和@NamedEntityGraph...
总结一下关于JPA的主键生成策略,JPA是用@GeneratedValue标记来注释的。...2. TABLE:自定义表生成器 3. Identity:像MS SQL支持Identity字段的生成主键策略 4. Sequence:像Oracle支持Sequence的生成主键策略
SpringBoot整合JPA实现自动创建数据库表自动建表,JPA逆向生成数据库表 运行环境 jdk8+tomcat9+mysql+IntelliJ IDEA+maven 项目技术(必填) springboot+jpa 数据库文件(可选) 新建一个test的数据库即可,表在...
JPA注解@Access实例 test-jpa
本工具可以根据数据库表自动生成JPA开发所需的实体JavaBean(带有jpa主注解)、repository及service类,提高开发效率;目前支持数据库:MYSQL;并提供配合演示使用的demo项目。
NULL 博文链接:https://913.iteye.com/blog/2397146
JPA的基本注解主要包括@Entity、@Table、@Id、@GeneratedValue、@Basic、@Column、@Transient、@Temporal和@TableGenerator等。
JPA注解1.1 @Entity1.2 @Table1.3 @Id1.4 @GeneratedValue1.5 @Basic1.6 @Column1.7 @Transient1.8 @Temporal1.9 @TableGenerator 1. JPA注解 1.1 @Entity 标注在实体类上,表示此类对应一个数据表。 1.2 @Table 与...
这是JPA标签配置手册,从ORACLE官方得到的资料,里面对JPA所有的标签都进行详细的说明。 Index of Annotations ...o @TableGenerator o @Temporal o @Transient • U o @UniqueConstraint • V o @Version
springboot jpa 自动生成实体类的 文件 可以拿走直接用 Generate POJOs.groovy
04_JPA详解_第一个JPA实例与JPA主键生成策略.zip
springboot集成jpa代码,自动生成表,
SpringBoot整合JPA实现自动创建数据库表自动建表,JPA逆向生成数据库表 运行环境 jdk8+tomcat9+mysql+IntelliJ IDEA+maven 项目技术(必填) springboot+jpa 数据库文件(可选) 新建一个test的数据库即可,表在...
下面小编就为大家带来一篇使用JPA中@Query 注解实现update 操作方法(必看)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
下面小编就为大家带来一篇在JPA的@Query注解中使用limit条件(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
Hibernate 是最流行的ORM 框架之一,也是最早实现JPA 的规范框架之一。它被JBoss 收购后, 目前作为JBoss 的一个开源框架,它遵循LGPL v2.1 开源许可协议,官方主页是http://www.hiber ate.org/。
04_传智播客JPA详解_第一个JPA实例与JPA主键生成策略