JPA注解实体类,给表添加创建时间,更新时间,id的生成以及创建唯一约束
首先创建一个BaseModel,自动生成创建时间和更新时间
@SuppressWarnings("serial")
@MappedSuperclass
public class BaseModel implements Serializable{
@Temporal(TemporalType.TIMESTAMP)
@Column(insertable=false, updatable=false)
@CreationTimestamp
protected Date createTime;
@JsonIgnore
@Temporal(TemporalType.TIMESTAMP)
@Column(insertable=false)
@UpdateTimestamp
protected Date lastUpdateTime;
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Date getLastUpdateTime() {
return lastUpdateTime;
}
public void setLastUpdateTime(Date lastUpdateTime) {
this.lastUpdateTime = lastUpdateTime;
}
}
然后创建一个RandomIdModel,利用org.hibernate.id.UUIDHexGenerator生成的uuid作为主键
@SuppressWarnings("serial")
@MappedSuperclass
public class RandomIdModel extends BaseModel {
@Id
@Column(length=32)
@GeneratedValue(generator="UUIDHexGenerator")
@GenericGenerator(name="UUIDHexGenerator", strategy="uuid")
protected String id;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
然后就可以创建其他的具体实体类继承上面的model了,这样就保证了所有的表都会有创建时间和更新时间了
@SuppressWarnings("serial")
@Entity
@Table(name="tb_user",
indexes={ @Index(name=User.UK_NAME, unique=true, columnList="name"),
@Index(name=User.UK_PHONE, unique=true, columnList="phone")})
public class User extends RandomIdModel{
public static final String UK_NAME = "uk_name";
public static final String UK_PHONE = "uk_phone";
@Column(length=24)
private String name;
@Column(length=32)
private String password;
@Temporal(TemporalType.TIMESTAMP)
private Date birth;
@Enumerated(EnumType.STRING)
@Column(length=8)
private Sex sex;
@Column(length=64)
private String email;
@Column(length=11)
private String phone;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
public Sex getSex() {
return sex;
}
public void setSex(Sex sex) {
this.sex = sex;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
创建唯一索引时,自定义索引名,有利于后续业务判断。
当插入数据不唯一时,可根据抛出的异常,明确知道是哪个字段违反约束导致的
if(e.getCause() instanceof ConstraintViolationException){
String constraintName = ((ConstraintViolationException)e.getCause()).getConstraintName();
if(constraintName.equals(User.UK_NAME)){
return Resp.error(Resp.ErrorCode.USER_NAME_EXITS, null);
}
if(constraintName.equals(User.UK_PHONE)){
return Resp.error(Resp.ErrorCode.USER_PHONE_EXITS, null);
}
}
JPA注解实体类,给表添加创建时间,更新时间,id的生成以及创建唯一约束的更多相关文章
- MVC Code First 当实体类发生变化时,如何自动更新数据库表
下面做一个例子,Category是用户新建的一个实体类,然后添加一个字段,然后让数据库中的Category表也添加一个字段 1.Category.cs
- @NamedEntityGraphs --JPA按实体类对象参数中的字段排序问题得解决方法
JPA按实体类对象参数中的字段排序问题得解决方法@Entity @Table(name="complaints") @NamedEntityGraphs({ @NamedEntit ...
- [mysql]SQL语句-新增/修改 创建时间 更新时间
SQL关键词 要注意大小写 已建表,之前没有创建时间列, 现新增1列创建时间,并设置默认值为当前时间 --添加CreateTime 设置默认时间 CURRENT_TIMESTAMP ALTER T ...
- spring boot JPA中实体类常用注解
spring boot jpa中的注解很多,参数也比较多.没必要全部记住,但是经常查看官方文档也比较麻烦,记录一下一些常用的注解.通过一些具体的例子来帮助记忆. @Entity @Table(name ...
- Hibernate jpa 在实体类中对于时间的注解
在时间类型DATE 属性上添加一个 @Temporal(TemporalType.DATE)(精确到年月日)@Temporal(TemporalType.TIME)(精确到时分秒)@Temporal( ...
- Hibernate用注解实现实体类和表的映射
数据库mysql: 1.一对一 person50表password50表是一对一的关系: password50表中有外键 person_id person实体类: package com.c50.en ...
- Hibernate注解实体类
Hibernate注解1.@Entity(name="EntityName")必须,name为可选,对应数据库中一的个表2.@Table(name="",cat ...
- EntityFramework中实体类到表名的批量映射
在使用EntityFramework做CodeFirst开发时,经常需要将实体类映射到数据库表,但是C#实体类和数据库表中的命名遵循的是不同的规范,这就需要为每个实体类做一个到数据库表名的映射.大多情 ...
- Mysql 添加 create_time, update_time 创建时间 更新时间 自动更新
# 添加 创建 更新 时间字段 ALTER TABLE `表名` ADD COLUMN `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTA ...
随机推荐
- JFinal项目发送邮件——jfinal-mail-plugin
JFianl框架: JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速.代码量少.学习简单.功能强大.轻量级.易扩展.Restful.在拥有Java语言所有 ...
- Vim 中文社区:期待你的加入
我们的愿景 Vim 中文社区一直比较零散,缺少凝聚力,现有的一些群经常也是水的可以的,讨论各种无关紧要的内容,于是导致很大一部分人,将这些群丢入了群助手,渐渐地他们也淡出了 vim 中文社区. 而我理 ...
- vue.js+socket.io+express+mongodb打造在线聊天
vue.js+socket.io+express+mongodb打造在线聊天 在线地址观看 http://www.chenleiming.com github地址 https://github.com ...
- emqtt 试用(二)验证 emq 和 mosquito 的共享订阅
本地订阅(Local Subscription) 本地订阅(Local Subscription)只在本节点创建订阅与路由表,不会在集群节点间广播全局路由,非常适合物联网数据采集应用. 使用方式: 订 ...
- angular2 学习笔记 ( unit test 单元测试 )
第一次写单元测试. 以前一直都有听说 TDD 的事情. 今天总算是去尝试了一下. 先说说 TDD 的想法, 是这样的, 开发项目的流程 : 确定需求 -> 写类,接口,方法的名字(不写具体实现代 ...
- eclipse开发Groovy代码,与java集成,maven打包编译
今天尝试了一下在eclipse里面写Groovy代码,并且做到和Java代码相互调用,折腾了一下把过程记录下来. 首先需要给eclipse安装一下Groovy的插件,插件地址:https://gith ...
- JSON(三)——java中对于JSON格式数据的解析之json-lib与jackson
java中对于JSON格式数据的操作,主要是json格式字符串与JavaBean之间的相互转换.java中能够解析JSON格式数据的框架有很多,比如json-lib,jackson,阿里巴巴的fast ...
- Python之黏包的解决
黏包的解决方案 发生黏包主要是因为接收者不知道发送者发送内容的长度,因为tcp协议是根据数据流的,计算机操作系统有缓存机制, 所以当出现连续发送或连续接收的时候,发送的长度和接收的长度不匹配的情况下就 ...
- HTML5示例之WebSocket
Web应用程序通常有一些耗时的操作,但有些操作耗时不是很长,一分钟之内能完成.如果采用后台任务队列去异步处理,这样的用户不能实时看到后台处理的情况.倘若用户触发操作后,Web页面能够实时看到后台处理的 ...
- oracle12c:通过oracle客户端工具配置tns,并使用sqlldr进行批量导入数据
通过oracle客户端工具配置tns: 进入oracle配置工具“Net Configuration Assistant”-> 点击“下一步”,完成tns配置. 测试是否tns可用 命令:tns ...