【发布时间】:2017-09-06 22:18:06
【问题描述】:
我正在尝试将数据插入到具有列 (NAME, VALUE) 和
的表中EntityManager.persist()。
当我持久化像 ('xx', 'value1') 这样的实体时,它会在该实体的表中插入一条新记录。但是,如果我想保留一个像 ('xx', 'value2') 这样的新实体,该实体将保留在现有记录的位置。
问题是:
- 为什么以及如何发生?
- 有没有办法也插入 ('xx', 'value2')?
我发现了一个类似的问题here,但这个问题没有真正的答案。
非常感谢。
更新:第一列不是主键。相反,第二个是。
这里是实体:
@Entity
@Table(name = "TEST_DATA")
public class TestDataEntity implements Serializable {
private static final long serialVersionUID = 1L;
@Column(name = "NAME", nullable = false)
private String name;
@Id
@Column(name = "VALUE", nullable = false)
private String value;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
这里是持久化代码:
@Transactional
public static void storeTestData(EntityManager em, String name, String value) {
TestDataEntity entity = new TestDataEntity();
entity.setName(name);
entity.setValue(value);
em.persist(entity);
}
另外还有一个问题,描述为here.
【问题讨论】:
-
列是主键,不是值
-
@Armine:所以当你第一次调用
storeTestData(entityManager, "xx", "value1");然后storeTestData(entityManager, "xx", "value2");它实际上覆盖了之前持久化实体的主键并将其更改为“value2”?这确实很奇怪,我无法解释为什么会这样。 -
@OHGODSPIDERS:是的,和你描述的完全一样。这就是为什么我无法理解原因:(。