乐闻世界logo
搜索文章和话题

How to store Java Date to Mysql datetime with JPA

4 个月前提问
4 个月前修改
浏览次数18

1个答案

1

在Java开发过程中,当使用JPA(Java Persistence API)将Java中的日期和时间类型存储到MySQL数据库中,通常会涉及到一些特定的映射策略和注解的使用。以下是如何正确地将Java的日期类型存储到MySQL的日期时间类型步骤:

1. 实体类中的日期字段定义

首先,你需要在你的Java实体类中定义一个日期字段。这里以java.util.Date作为例子,虽然你也可以使用java.time.LocalDateTime等其他Java 8日期/时间API。

java
import java.util.Date; import javax.persistence.*; @Entity public class Event { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Temporal(TemporalType.TIMESTAMP) // 使用Temporal注解来指定日期/时间的精确类型 private Date eventDate; // 省略getter和setter方法 }

2. 使用@Temporal注解

@Temporal注解是用来映射Java的java.util.Datejava.util.Calendar到SQL数据库中的日期和时间类型。TemporalType枚举提供了三个值:

  • TemporalType.DATE:仅映射日期,时间信息会被忽略(对应SQL的DATE)。
  • TemporalType.TIME:仅映射时间,日期信息会被忽略(对应SQL的TIME)。
  • TemporalType.TIMESTAMP:映射日期和时间(对应SQL的DATETIME或 TIMESTAMP)。

在上面的例子中,我们使用TemporalType.TIMESTAMP,因为我们想要存储完整的日期和时间信息。

3. 配置持久化和EntityManager

确保你的持久化单元已经配置正确,可以连接到你的MySQL数据库。以下是persistence.xml配置文件的一个简单例子:

xml
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd" version="2.1"> <persistence-unit name="eventPU" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> <properties> <property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/> <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/eventsdb"/> <property name="javax.persistence.jdbc.user" value="username"/> <property name="javax.persistence.jdbc.password" value="password"/> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/> <property name="hibernate.hbm2ddl.auto" value="update"/> <property name="hibernate.show_sql" value="true"/> </properties> </persistence-unit> </persistence>

4. 存储和检索实体

使用JPA的EntityManager来存储和检索实体。例如:

java
EntityManagerFactory emf = Persistence.createEntityManagerFactory("eventPU"); EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); Event event = new Event(); event.setEventDate(new Date()); // 设置当前日期和时间 em.persist(event); // 存储实体 em.getTransaction().commit(); em.close(); emf.close();

通过这种方式,Java的日期时间可以被正确地映射和存储到MySQL的日期时间字段中。这种方法的好处是,它提供了一个清晰、类型安全的方式来处理日期和时间的持久化,同时也避免了常见的格式问题和错误。

2024年8月7日 00:25 回复

你的答案