JPA: SQL Error: 1062, SQLState: 23000 ERROR: Duplicate entry:
JPA: SQL Error: 1062, SQLState: 23000 ERROR: Duplicate entry:
我正在尝试自学一些 Java 和 JPA,现在是几天以来什么都没发生的地步。
我有两个实体(ITEM 和 ITEMLIST)通过 OneToMany 关系链接。
我把ITEM单独持久化到数据库了
目标是得到一个 table 带有 ITEMLIST 的主键和 ITEMS 的外键。
但是当我保存第二个 ITEMLIST 时,出现“重复...”错误。
WARN: SQL Error: 1062, SQLState: 23000
ERROR: Duplicate entry '1' for key 'xxxxx'
Information: HHH000010: On release of batch it still contained JDBC statements
Information: ERROR: javax.persistence.RollbackException: Error while committing the transaction
当我启动应用程序并将一个 ITEM 放入 ITEMLIST 之前的 ITEMLIST 时,错误出现在 ITEMLIST_ITEM table.
我的 ITEM 实体:
@Entity
public class Item implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String name;
private String description;
private double price;
public Item(String name, String description, double price) {
this.name = name;
this.description = description;
this.price = price;
}
我的 ITEMLIST 实体:
@Entity
public class ItemList implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@OneToMany
private Set<Item> itemInList;
public ItemList() {
itemInList = new HashSet<>();
}
我持久化实体的方法:
public void saveItem(Item item) {
EntityManager em = EntityFactory.getEntityManager();
try {
em.getTransaction().begin();
em.persist(item);
em.getTransaction().commit();
} catch (EntityExistsException e) {
System.out.println(e);
} finally {
em.close();
}
}
public void saveItemList(ItemList itemlist) {
EntityManager em = EntityFactory.getEntityManager();
try {
em.getTransaction().begin();
em.merge(itemlist);
em.getTransaction().commit();
} catch (EntityExistsException e) {
System.out.println(e);
} finally {
em.close();
}
}
欢迎提供帮助,即使是 generell 中的代码。
您需要使用唯一 ID 保存在数据库中。将主键保存在数据库中时,您的主键可能会重复。尝试做一个自动递增 id
这可能是因为在保存 ItemSet 时,您试图保留此 Set 的相同 Item 值,而您无法做到这一点。
我通过将关系更改为 @ManyToMany 解决了这个问题。就我而言,它有效。
错误说明您输入的内容,即键“xxxxxx”是重复值。该值存在于您的数据库中,并且您没有为该键保存任何重复值。
为避免此错误,您不应提供任何重复值,否则您必须允许重复值保存该“xxxxx”键的数据。
我正在尝试自学一些 Java 和 JPA,现在是几天以来什么都没发生的地步。
我有两个实体(ITEM 和 ITEMLIST)通过 OneToMany 关系链接。
我把ITEM单独持久化到数据库了
目标是得到一个 table 带有 ITEMLIST 的主键和 ITEMS 的外键。
但是当我保存第二个 ITEMLIST 时,出现“重复...”错误。
WARN: SQL Error: 1062, SQLState: 23000
ERROR: Duplicate entry '1' for key 'xxxxx'
Information: HHH000010: On release of batch it still contained JDBC statements
Information: ERROR: javax.persistence.RollbackException: Error while committing the transaction
当我启动应用程序并将一个 ITEM 放入 ITEMLIST 之前的 ITEMLIST 时,错误出现在 ITEMLIST_ITEM table.
我的 ITEM 实体:
@Entity
public class Item implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String name;
private String description;
private double price;
public Item(String name, String description, double price) {
this.name = name;
this.description = description;
this.price = price;
}
我的 ITEMLIST 实体:
@Entity
public class ItemList implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@OneToMany
private Set<Item> itemInList;
public ItemList() {
itemInList = new HashSet<>();
}
我持久化实体的方法:
public void saveItem(Item item) {
EntityManager em = EntityFactory.getEntityManager();
try {
em.getTransaction().begin();
em.persist(item);
em.getTransaction().commit();
} catch (EntityExistsException e) {
System.out.println(e);
} finally {
em.close();
}
}
public void saveItemList(ItemList itemlist) {
EntityManager em = EntityFactory.getEntityManager();
try {
em.getTransaction().begin();
em.merge(itemlist);
em.getTransaction().commit();
} catch (EntityExistsException e) {
System.out.println(e);
} finally {
em.close();
}
}
欢迎提供帮助,即使是 generell 中的代码。
您需要使用唯一 ID 保存在数据库中。将主键保存在数据库中时,您的主键可能会重复。尝试做一个自动递增 id
这可能是因为在保存 ItemSet 时,您试图保留此 Set 的相同 Item 值,而您无法做到这一点。
我通过将关系更改为 @ManyToMany 解决了这个问题。就我而言,它有效。
错误说明您输入的内容,即键“xxxxxx”是重复值。该值存在于您的数据库中,并且您没有为该键保存任何重复值。 为避免此错误,您不应提供任何重复值,否则您必须允许重复值保存该“xxxxx”键的数据。