如何避免Postgres数据库中的重复条目?条目包含不同的值

时间:2018-04-17 19:00:01

标签: java spring postgresql hibernate save

存储实体的方法:

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 ...

的新条目

1 个答案:

答案 0 :(得分:0)

你的问题是你的

GenerationType.IDENTITY

文件说:

  

表示持久性提供程序必须为其分配主键   使用数据库标识列的实体。

现在关键问题是,生成什么SQL。你能跟踪生成的插入SQL吗?

另外,我更喜欢使用数据库的SEQUENCES。因此,如果您使用ID /主键列的数据库序列,那么我不必乱用持久性提供程序的标识,并且任何应用程序对数据库的行为都相同。

同样问题可能是您创建表的DDL,但我假设您知道如何使用给定的约束来定义数据库表。