当前位置:  编程技术>java/j2ee

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

    来源: 互联网  发布时间:2014-11-05

    本文导语:  扩展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.ValueGenera...

扩展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
 *


 * 支持Java8新的时间包
 *
 * @see java.time.LocalDateTime
 * @see java.time.LocalDate
 * @see java.time.LocalTime
 */
public abstract class AbstractTimeGeneration implements AnnotationValueGeneration {
    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的UIMA注解类 uimaFIT
  • Java8新特性之重复注解(repeating annotations)浅析
  • java自定义注解接口实现方案
  • 基于Java注解(Annotation)的自定义注解入门介绍
  • Java注解之Retention、Documented、Inherited介绍
  • Java注解详细介绍
  • Java8中的类型注解浅析
  • java教程之java注解annotation使用方法
  • Java中三种简单注解介绍和代码实例
  • 基于Java 注解(Annotation)的基本概念详解
  • Java Annotation(Java 注解)的实现代码
  • java将类序列化并存储到mysql(使用hibernate)
  • Hibernate映射文件生成工具 hbm2java
  • java 框架Hibernate的generator属性的七种class介绍
  • 浅析java程序中hibernate的应用总结
  • java优化hibernate性能的几点建议
  • java模拟hibernate一级缓存示例分享
  • java Hibernate延迟加载
  • java Hibernate 一对多自身关联问题
  • Java开源项目Hibernate
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 论坛 iis7站长之家
  • java命令运行.class文件为什么不能带扩展名?
  • 我刚学java,想请教一下,我在文本中创建了一个接口,一个类,还有一个扩展类,保存为.java文件时,如何给文件名?
  • 问个java扩展机制问题..
  • 近期发现网页上有.cfm扩展名的网站!.cfm是什么格式!用java开发的吗?
  • java程序的扩展名是什么?如何用jdk编译并生成一个可执行文件呢?我太菜了。各位大侠见笑了。
  • 我在网上下在了一个java写的编辑器的程序,扩展名是jar,可以用winzip打开,请问如何能够运行呢?
  • 问题J20011028A1:请问扩展类包(比如fscontext)在java.sun.com的什么地方下?我太笨:( 半天都没找到
  • 把java扩展包放在jrelibext下,老说找不到相应的包
  • java根据扩展名获取系统图标和文件图标示例
  • 在编译使用扩展标签的java文件时,得到package javax.servlet.jsp does not exist,package javax.servlet.jsp does not exist的错误
  • java命名空间java.sql类types的类成员方法: java_object定义及介绍
  • 我想学JAVA ,是买THINK IN JAVA 还是JAVA2核心技术:卷1 好???
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: imageflavor定义及介绍
  • 请问Java高手,Java的优势在那里??,Java主要适合于开发哪类应用程序
  • java命名空间java.lang.management类managementfactory的类成员方法: getcompilationmxbean定义及介绍
  • 如何将java.util.Date转化为java.sql.Date?数据库中Date类型对应于java的哪个Date呢
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getlibrarypath定义及介绍
  • 谁有电子版的《Java编程思想第二版(Thinking in java second)》和《Java2编程详解(special edition java2)》?得到给分
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getstarttime定义及介绍
  • 本人想学java,请问java程序员的待遇如何,和java主要有几个比较强的方向
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: stringflavor定义及介绍
  • 我对JAVA一窍不通,可惜别人却给我一个Java的project,要我做一个安装程序,请问哪里有JAVA INSTALLER下载,而且我要不要安装java的sdk才能完成此项任务?
  • java命名空间java.security类keystore的类成员方法: getdefaulttype定义及介绍
  • 新年第一天,让我们讨论一下未来一年JAVA的发展趋势! 个人认为,JAVA将主要朝ERP和JAVA手机方面发展!
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getclasspath定义及介绍
  • 我想学Java,但不知道Java的实用的开发工具有那些,Java主要用在哪些方面,EJB到底是什么东西??
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: javaserializedobjectmimetype定义及介绍
  • redhat7.3下,java程序打印中文直接用java命令执行正常,用crontab执行java命令为乱码
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: javafilelistflavor定义及介绍
  • 各位学java的朋友,学java的未来是什么,你们学java都用来开发什么项目啊!来者给分!!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3