【发布时间】:2016-08-17 18:01:18
【问题描述】:
我正在保存一些实体,这些实体是从 REST-API 获得的。我为此使用 Spring JPA 存储库。我在保存时为每个实体生成一个 id。 sanveAndFlush() 方法只监视实体的 id 是否已经存在,然后它不会再次保存它。但我的问题是,我生成了 i id,然后它只是在保存时复制了实体。我如何与其他实体(例如文本或类似内容)进行比较。
家政服务:
public void saveOrUpdate(Tweetpost tweetpost) {
tweetRepository.saveAndFlush(tweetpost);
}
推文实体:
@Id
@GeneratedValue
@Column(columnDefinition = "INT unsigned")
private Integer id;
@Column(columnDefinition = "LONG")
private long tweetid;
@NotEmpty
@Length(max = 255)
@Column(columnDefinition = "VARCHAR(255)", length = 255, nullable = false)
private String profileImageUrl;
@NotEmpty
@Length(max = 64)
@Column(columnDefinition = "VARCHAR(64)", length = 64, nullable = false)
private String fromUser;
@NotEmpty
@Column(columnDefinition = "TEXT", nullable = false)
private String unmodifiedText;
@NotNull
@Column(columnDefinition = "DATE", nullable = false)
private Date createdAt;
@Length(max = 255)
@Column(columnDefinition = "VARCHAR(255)", length = 255, nullable = false)
private String url;
@Length(max = 255)
@Column(columnDefinition = "VARCHAR(255)", length = 255, nullable = false)
private String displayUrl;
@Length(max = 255)
@Column(columnDefinition = "VARCHAR(255)", length = 255, nullable = false)
private String expandedUrl;
@Length(max = 255)
@Column(columnDefinition = "VARCHAR(255)", length = 255, nullable = false)
private String mediaUrl;
【问题讨论】:
-
试着把你想要的解释清楚一点。听起来您正在传递没有主键的实体数据 (JSON),并希望您的 saveAndFlush 方法根据某些非 pk 字段判断该实体是否已经存在。如果是这样,为什么还要使用 Integer id 值,而是将那些你想要唯一的字段作为主键?或者您可以使用传入的字段更新您的 saveAndFlush 方法以首先查询 - 如果实体存在,则根据传入的数据进行更改,否则合并或持久化实体。
标签: java spring jpa spring-data-jpa