java扩展Hibernate注解支持java8新时间类型_java

分享到:

扩展Hibernate注解@CreationTimestamp,@UpdateTimestamp支持Java8新的时间类型
Hibernate version: 4.3.5.Final


package com.hibernate.annotation;

import org.hibernate.HibernateException;
import org.hibernate.tuple.AnnotationValueGeneration;
import org.hibernate.tuple.ValueGenerator;

import java.lang.annotation.Annotation;
import java.sql.Time;
import java.sql.Timestamp;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.Calendar;
import java.util.Date;

/**
 * Created with IntelliJ IDEA.
 * User: ZhongGang
 * Date: 14-4-16
 * Time: 上午11:40
 * <p/>
 * 支持Java8新的时间包
 *
 * @see java.time.LocalDateTime
 * @see java.time.LocalDate
 * @see java.time.LocalTime
 */
public abstract class AbstractTimeGeneration<A extends Annotation> implements AnnotationValueGeneration<A> {
    protected ValueGenerator<?> generator;

    @Override
    public void initialize(A annotation, Class<?> propertyType) {
        if (LocalDateTime.class.isAssignableFrom(propertyType)) {
            generator = (session, owner) -> LocalDateTime.now();
        } else if (LocalDate.class.isAssignableFrom(propertyType)) {
            generator = (session, owner) -> LocalDate.now();
        } else if (LocalTime.class.isAssignableFrom(propertyType)) {
            generator = (session, owner) -> LocalTime.now();
        } else if (java.sql.Date.class.isAssignableFrom(propertyType)) {
            generator = (session, owner) -> new java.sql.Date(new Date().getTime());
        } else if (Time.class.isAssignableFrom(propertyType)) {
            generator = (session, owner) -> new Time(new Date().getTime());
        } else if (Timestamp.class.isAssignableFrom(propertyType)) {
            generator = (session, owner) -> new Timestamp(new Date().getTime());
        } else if (Date.class.isAssignableFrom(propertyType)) {
            generator = (session, owner) -> new Date();
        } else if (Calendar.class.isAssignableFrom(propertyType)) {
            generator = (session, owner) -> {
                Calendar calendar = Calendar.getInstance();
                calendar.setTime(new Date());
                return calendar;
            };
        } else {
            throw new HibernateException("Unsupported property type for generator annotation " + annotation.getClass().getSimpleName());
        }
    }

    @Override
    public ValueGenerator<?> getValueGenerator() {
        return generator;
    }

    @Override
    public boolean referenceColumnInSql() {
        return false;
    }

    @Override
    public String getDatabaseGeneratedReferencedColumnValue() {
        return null;
    }
}

昵    称:
验证码:

相关文档:

  • java泛型之带有两个类型参数的泛型示例
    在泛型中可以声明多个类型参数。为了指定两个或更多个类型参数,只需要使用逗号分隔参数列表即可。如例:...
  • java中的匿名内部类详细总结_java
    以下是对java中的匿名内部类进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助...
  • Java 8新特性终极指南
    编者注:Java 8已经公布有一段时间了,种种迹象表明Java 8是一个有重大改变的发行版。...
  • java中BigDecimal的操作方法_java
    这篇文章主要介绍了java中BigDecimal的操作方法,较为详细的分析了BigDecimal类在进行商业计算时的应用方法,精度以及注意事项等问题,需要的...
  • RMSDAO - J2ME对象持久化框架
    J2ME的存储框架是RMS,一个基于byte的简单系统。为了访问J2ME中的Java对象,作者开发了一个J2ME对象持久化框架RMSDAO。它能够帮助开发人员...
  • Java实现几种常见排序算法代码_java
    排序(Sorting) 是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个关键字有序的序...
  • Java集合总览
    这篇文章总结了所有的Java集合(Collection)。主要介绍各个集合的特性和用途,以及在不同的集合类型之间转换的方式。...
  • JMX整理
    JMX的全称为Java Management Extensions. 顾名思义,是管理Java的一种扩展。这种机制可以方便的管理正在运行中的Java程序。常用于管理线程,内...
  • java常见异常说明汇总
     这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存在的对象...
  • java中实现汉字按照拼音排序(示例代码)_java
    这篇文章主要是对java中将汉字按照拼音排序的实现代码进行了详细的分析介绍。需要的朋友可以过来参考下,希望对大家有所帮助...
  • java线程并发semaphore类示例_java
    Java 5.0里新加了4个协调线程间进程的同步装置,它们分别是Semaphore, CountDownLatch, CyclicBarrier和Exchanger,本例主要介绍Semaphore,Semaphore是用来管...
  • JDBC ResultSet 可滚动的结果集
    本文主要介绍:JDBC ResultSet 可滚动的结果集,很多时候我们的项目都会有多个数据源,比如一个项目既支持PostgreSQL又支持SQLServer或者mysql...
  • java技巧--提高代码运行效率
    1.尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例...
  • Java方法覆盖和变量覆盖的区别详解
    对于Java初学者来说,很容易将Java中的方法覆盖、方法重载以及变量覆盖互相混淆,本文主要来对Java中的方法覆盖和方法重载进行详细地...
  • LLVM 的 Java 版:JLLVM
    JLLVM 是 Java 版的 LLVM 核心,它是轻量级以及平台无关的,JLLVM 用于识别 LLVM IR 和在 Java 类中存储 IR 元素。...
  • Java拖曳鼠标实现画线功能的方法_java
    这篇文章主要介绍了Java拖曳鼠标实现画线功能的方法,需要的朋友可以参考下...
  • Java 8新特性——default方法(defenece方法)介绍
    我们都知道在Java语言的接口中只能定义方法名,而不能包含方法的具体实现代码。接口中定义的方法必须在接口的非抽象子类中实现。...
  • java使用poi读取ppt文件和poi读取excel、word示例_java
    这篇文章主要介绍了java使用poi读取ppt文件和poi读取excel、word示例,需要的朋友可以参考下...
  • java.util.ResourceBundle用法详解
    这个类主要用来解决国际化和本地化问题。国际化和本地化可不是两个概念,两者都是一起出现的。可以说,国际化的目的就是为了实现...
  • 基于Java回顾之反射的使用分析_java
    本篇文章是对Java反射的使用进行了详细的分析介绍,需要的朋友参考下...