15_@Temporal注解详解

本文详细介绍了在Java实体类中使用@Temporal注解的背景和目的。通过实例展示了未添加@Temporal注解时,Date类型字段默认存储为datetime类型,精确到秒。而添加@Temporal注解后,可以将日期精度调整为date类型,适用于只需要日期部分的场景。文章还提及了数据库中Date类型的不同精度,并讨论了@Temporal注解在数据库表结构映射中的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

没加@Temporal注解前,删除表格,可以在删除表的情况下运行项目,这样它会自动创建一个这样的表

在这里插入图片描述

第一步,关于实体类Customer,增加了两个Date

//关联数据表
@Table(name="jpa_customers")
//持久化类
@Entity
public class Customer {

    @Id//标明是主键
    @GeneratedValue(strategy = GenerationType.IDENTITY)//设置主键生成策略

    private Integer id;
    @Column(name = "last_name")
    private String lastName;
    private String email;
    private int age;

    private Date createdTime; //Date为java.util.Date
    private Date birth;
    
    //省略get和set

第二步,运行测试方法

  @Test
    public void testSave(){
        //创建一个实体管理器工厂EntityManagerFactory
        EntityManagerFactory factory = Persistence.createEntityManagerFactory("myJpa");
        //从工厂中获取实体类管理器 EntityManager
        EntityManager manager = factory.createEntityManager();
        //获取事务并开启
        EntityTransaction tx = manager.getTransaction();
        tx.begin();
        //创建实体
        Customer customer = new Customer();
        customer.setAge(12);
        customer.setEmail("12345@qq.com");
        customer.setLastName("tom");
        customer.setBirth(new Date());
        customer.setCreatedTime(new Date());

        //调用manager的方法,保存该对象信息
        manager.persist(customer);

        //提交事务
        tx.commit();
        //关闭manager
        manager.close();
        //关闭factory
        factory.close();
    }

第三步,生成的表格数据,发现时间精确到秒,但生日不需要精确到秒,因此需要加上@Temporal注解
在这里插入图片描述
第四步,观察表结构,发现java中的Date类型对应数据库中的datetime类型
在这里插入图片描述

实体类加上@Temporal注解后

//关联数据表
@Table(name="jpa_customers")
//持久化类
@Entity
public class Customer {

    @Id//标明是主键
    @GeneratedValue(strategy = GenerationType.IDENTITY)//设置主键生成策略

    private Integer id;
    @Column(name = "last_name")
    private String lastName;
    private String email;
    private int age;

    @Temporal(TemporalType.TIMESTAMP)
    private Date createdTime; //Date为java.util.Date
    @Temporal(TemporalType.DATE)
    private Date birth;
    
    //省略getter和setter

删除表,重新运行项目后,表中数据变为
在这里插入图片描述

表结构变为,其中birth的类型变为了date类型
在这里插入图片描述
在核心的 JavaAPI 中并没有定义Date类型的精度(temporalprecision). 而在数据库中,表示Date类型的数据有DATE,TIME, 和 TIMESTAMP三种精度(即单纯的日期,时间,或者两者兼备). 在进行属性映射时可使用@Temporal注解来调整精度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值