如何基于非唯一密钥插入或更新JPA实体?

时间:2019-06-12 05:18:35

标签: java mysql hibernate jpa

我有一个Mysql表,如下所示:

CREATE TABLE ABCD
(
  TId BIGINT(8) PRIMARY KEY AUTO_INCREMENT,
  TKey VARCHAR(200) NOT NULL,
  TValue BIGINT(8) NOT NULL
);

它具有如下数据:

TId TKey TValue 
1   abc    123
2   cde    345
3   def    546

我想做的是,如果我再次插入具有相同TKey的实体,它将更新现有记录,而不是插入新记录。

下面是我保存实体的代码:

ABCD abcd = new ABCD();
abcd.setKey(key);
abcd.setValue(value);
abcdService.create(abcd);

1 个答案:

答案 0 :(得分:4)

Hibernate使用主键列值跟踪Java代码中的实体。因此,如果您使用键ABCD和某个值创建一个新的cde实体,则Hibernate会将其作为新实体,并且在保存时将在基础表中插入。

如果您要修改其键为cde的实体,则应首先获取该记录:

EntityManager em = getEntityManager();
ABCD movie = em.find(ABCD.class, 2);
movie.setValue(789);

以上假设您的框架已经为您处理了交易。