小编典典

由于Hibernate 4不支持它,因此您需要实现一个如本示例所示的用户类型。

import org.hibernate.HibernateException;

import org.hibernate.engine.spi.SessionImplementor;

import org.hibernate.type.StandardBasicTypes;

import org.hibernate.usertype.EnhancedUserType;

import java.io.Serializable;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Types;

import java.time.Instant;

import java.time.LocalDateTime;

import java.time.ZoneId;

import java.util.Date;

public class LocalDateTimeUserType implements EnhancedUserType, Serializable {

private static final int[] SQL_TYPES = new int[]{Types.TIMESTAMP};

@Override

public int[] sqlTypes() {

return SQL_TYPES;

}

@Override

public Class returnedClass() {

return LocalDateTime.class;

}

@Override

public boolean equals(Object x, Object y) throws HibernateException {

if (x == y) {

return true;

}

if (x == null || y == null) {

return false;

}

LocalDateTime dtx = (LocalDateTime) x;

LocalDateTime dty = (LocalDateTime) y;

return dtx.equals(dty);

}

@Override

public int hashCode(Object object) throws HibernateException {

return object.hashCode();

}

@Override

public Object nullSafeGet(ResultSet resultSet, String[] names, SessionImplementor session, Object owner)

throws HibernateException, SQLException {

Object timestamp = StandardBasicTypes.TIMESTAMP.nullSafeGet(resultSet, names, session, owner);

if (timestamp == null) {

return null;

}

Date ts = (Date) timestamp;

Instant instant = Instant.ofEpochMilli(ts.getTime());

return LocalDateTime.ofInstant(instant, ZoneId.systemDefault());

}

@Override

public void nullSafeSet(PreparedStatement preparedStatement, Object value, int index, SessionImplementor session)

throws HibernateException, SQLException {

if (value == null) {

StandardBasicTypes.TIMESTAMP.nullSafeSet(preparedStatement, null, index, session);

} else {

LocalDateTime ldt = ((LocalDateTime) value);

Instant instant = ldt.atZone(ZoneId.systemDefault()).toInstant();

Date timestamp = Date.from(instant);

StandardBasicTypes.TIMESTAMP.nullSafeSet(preparedStatement, timestamp, index, session);

}

}

@Override

public Object deepCopy(Object value) throws HibernateException {

return value;

}

@Override

public boolean isMutable() {

return false;

}

@Override

public Serializable disassemble(Object value) throws HibernateException {

return (Serializable) value;

}

@Override

public Object assemble(Serializable cached, Object value) throws HibernateException {

return cached;

}

@Override

public Object replace(Object original, Object target, Object owner) throws HibernateException {

return original;

}

@Override

public String objectToSQLString(Object object) {

throw new UnsupportedOperationException();

}

@Override

public String toXMLString(Object object) {

return object.toString();

}

@Override

public Object fromXMLString(String string) {

return LocalDateTime.parse(string);

}

}

然后,可以在带有@Type批注的映射中使用新的用户类型。例如

@Type(type="com.hibernate.samples.type.LocalDateTimeUserType")

@Column(name = "invalidate_token_date")

private LocalDateTime invalidateTokenDate;

@Type批注需要一个实现userType接口的类的完整路径;这是用于生成映射列的目标类型的工厂。

这是在JPA2.1中执行相同操作的方法

2020-06-20

java8与hibernate_如何在JPA和Hibernate中使用Java 8 LocalDateTime相关推荐

  1. 如何在 Google Chrome 浏览器中使用 Java?

    如何在 Google Chrome 浏览器中使用 Java? 本文适用于: 浏览器: Chrome Java 版本: 7.0, 8.0 Chrome 对 NPAPI 的支持 用于 Web 浏览器的 J ...

  2. java代码如何与界面联系在一起_如何在Visual Studio Code 中编写Java代码

    本文将展示如何在Visual Studio Code中用Java编写和运行一个简单的Hello World程序. 首先您必须在本地开发环境中安装Java SE开发工具包(JDK) Visual Stu ...

  3. java baseentity_如何在JPA的BaseEntity中实现equals()和hashcode()方法?

    我有一个BaseEntity类,它是我的应用程序中所有JPA实体的超类. @MappedSuperclass public abstract class BaseEntity implements S ...

  4. java中的jpa_在JPA中处理Java的LocalDateTime

    java中的jpa 几天前,我在处理JPA中的LocalDateTime属性时遇到问题. 在这篇博客文章中,我将尝试创建一个样本问题来说明该问题以及我使用的解决方案. 考虑以下实体,该实体为特定公司的 ...

  5. 在JPA中处理Java的LocalDateTime

    几天前,我在处理JPA中的LocalDateTime属性时遇到问题. 在这篇博客文章中,我将尝试创建一个示例问题来说明该问题以及我使用的解决方案. 考虑以下实体,该实体为特定公司的员工建模– @Ent ...

  6. 如何在 OS X Yosemite 中安装 Java

    如果你的 Mac 纯净的安装了 OS X Yosemite 的话,其中是不会包含 Java 的,如果你的 Mac 需要安装 Java 环境的话,可以通过下面介绍的两种方法来实现.通过手动安装最新版 J ...

  7. jpa和hibernate_从JPA到Hibernate的旧版和增强型标识符生成器

    jpa和hibernate JPA标识符生成器 JPA定义了以下标识符策略: 战略 描述 汽车 持久性提供程序选择基础数据库支持的最合适的标识符策略 身份 标识符由数据库IDENTITY列分配 序列 ...

  8. jpa和hibernate_使用JPA和Hibernate有效删除数据

    jpa和hibernate 您可能会遇到必须对关系数据库中存储的大量数据集执行批量删除的情况. 如果您将JPA与Hibernate一起用作基础OR映射器,则可以尝试通过以下方式调用EntityMana ...

  9. JPA和Hibernate的关系

    转载自:https://www.cnblogs.com/amoyzhu/p/5937717.html JPA Java Persistence API,是Java EE 5的标准ORM接口,也是ejb ...

最新文章

  1. 看懂mysql执行计划--官方文档
  2. Html5 Game - SpaceWar
  3. springboot-quartz工程动态调度的实现
  4. 方向向量转欧拉角_欧拉角、旋转向量和旋转矩阵的相互转换
  5. 软件构造学习笔记-第三周
  6. Android Studio导入工程的正确姿势
  7. Flow 常用知识点整理
  8. dubbo 分组后,dubbo-admin 看不到服务
  9. Github-Git for windowsTortoiseGit下载与安装
  10. python用jieba模块分词实现关键词提取
  11. powerdesigner 数据类型与数据库数据类型对应
  12. mysql_query 资源标识符_PHP mysql_query() 函数解析
  13. C语言 qq自动点赞程序,qq自动无限点赞脚本
  14. 集体智慧编程源代码(免费)
  15. 现代数字图像处理---lena图像处理
  16. 惠普HP8570W minipcie无线网卡接口改装m.2网卡Intel9260AC
  17. 快速迭代式开发使用方法总结
  18. 三极管NPN和PNP的区别
  19. 关于计算机的论文英语2000字,英语论文2000字左右
  20. Sverlet案例小萌神服务器端

热门文章

  1. kafka修改分区数_ELK|kafka增加分区或调整副本数
  2. mfc formview中的关闭视图函数_VC|API消息处理(回调函数+分支语句)与MFC中的消息映射函数...
  3. php 手机端播放器,用JS代码适配电脑端和手机端播放器代码
  4. 前端框架 Angular 11.0.0 正式发布,不再支持 IE 9 、10
  5. NumSharp v0.6.5 .NET矩阵计算库,与TensorFlow.NET无缝融合
  6. 无法连接iphone软件更新服务器_上海腾科教育今日分享——提示“无法连接到服务器”的解决办法...
  7. linux多cpu运行python脚本,linux系统使用python获取cpu信息脚本分享
  8. antdesign 柱状图_ant design pro (十)advanced 图表
  9. python 仪表盘 ppt_Python强大的pyecharts绘画优美图形lt;三gt;
  10. .net函数查询_用python实现多文档查询