jpa postgresql timestamptz 保存时间不正确

背景:

在使用jpa的实体对象, 保存到数据库时发现created_tie 总是不正确相差4个月
如果是时区问题, 应该只会是8小时

仔细查看Entity类代码

@Column(name = "created_time", updatable = false, columnDefinition = "timestamptz")
@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ssXXX")// jackson的序列化格式
@CreationTimestamp // 用来转换 Date 到数据库不同的格式
private Date createdTime;

由于主键id的是通过其他方法生成的, 所以导致在使用save方法时, 将对象判断为 不是新实体

entityInformation.isNew(entity)这个方法就一直是false了

再因为@Column updatable = false,  更新数据时, 跳过这个字段

所以产生了这个问题

为什么相差4个月, 原因暂未找到

=======================

insertable 和 updatable 跳过这个字段的对应DB操作

=======================

@DynamicInsert 和 @DynamicUpdate

jpa默认更新每个字段, 加上注解后字段如果是null值就会跳过 生成动态sql

### JPAPostgreSQL的关系映射实例 在Java Persistence API (JPA) 中配置实体类到关系型数据库表之间的映射涉及到为每个持久化字段设置相应的映射属性[^1]。当使用PostgreSQL作为底层数据库时,这种映射同样适用,并且可以通过定义实体类来实现。 下面是一个简单的例子展示如何利用JPA管理一对多双向关联: #### 实体类设计 假设有一个`Department`部门和多个`Employee`员工之间存在一对多的关系,在此情况下可以创建两个对应的实体类如下所示: ```java @Entity public class Department { @Id private Long id; private String name; @OneToMany(mappedBy = "department", cascade = CascadeType.ALL, orphanRemoval = true) private List<Employee> employees = new ArrayList<>(); // Getters and Setters... } @Entity @Table(name = "employees") public class Employee { @Id private Long id; private String firstName; private String lastName; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "department_id") private Department department; // Getters and Setters... } ``` 上述代码片段展示了通过`@OneToMany`注解指定了一对多的关系以及`mappedBy`参数指明了反向访问路径;而`@ManyToOne`则用来表示多对一的方向并设置了外键约束`@JoinColumn`指向父级表中的主键列名。 为了使这些实体能够正常工作于PostgreSQL之上,还需要确保应用程序的数据源已正确配置连接至目标数据库实例。通常这会涉及修改Spring Boot项目的application.properties文件或其他形式的应用程序配置资源以包含必要的URL、用户名及密码信息等。 此外,对于更复杂的业务逻辑需求,还可以考虑采用自定义查询方法或JPQL(Java Persistence Query Language),以便更好地操作数据模型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值