没加@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注解来调整精度