存储实体的方法:
PoolDef poolDef = new PoolDef();
poolDef.setDate_from(date);
poolDef.setName(poolList.getPoolList().get(i).getName());
poolDefRepository.save(poolDef);
实体本身:
@Setter
@Getter
@EqualsAndHashCode(of = {"Id"})
@Transactional
@Entity
public class PoolDef {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long Id;
private String name;
@Column(name = "date_from", columnDefinition = "timestamp with time zone not null")
private OffsetDateTime date_from;
}
唯一不同的值是date_from
。我不知道,为什么新条目被添加到数据库而不仅仅是更新。我有基于主@EqualsAndHashcode
密钥构建的Id
,因此date_from
无关紧要。每个方法调用都会创建一个带有全新Id
...
答案 0 :(得分:0)
你的问题是你的
GenerationType.IDENTITY
文件说:
表示持久性提供程序必须为其分配主键 使用数据库标识列的实体。
现在关键问题是,生成什么SQL。你能跟踪生成的插入SQL吗?
另外,我更喜欢使用数据库的SEQUENCES。因此,如果您使用ID /主键列的数据库序列,那么我不必乱用持久性提供程序的标识,并且任何应用程序对数据库的行为都相同。
同样问题可能是您创建表的DDL,但我假设您知道如何使用给定的约束来定义数据库表。