【问题标题】:JPA: SQL Error: 1062, SQLState: 23000 ERROR: Duplicate entry:JPA:SQL 错误:1062,SQLState:23000 错误:重复条目:
【发布时间】:2019-01-21 12:31:58
【问题描述】:

我正在尝试自学一点 Java 和 JPA,现在是从几天以来什么都没有发生的地步。

我有两个通过 OneToMany 关系链接的实体(ITEM 和 ITMLIST)。

我将 ITEM 单独保存到数据库中。

目标是获得一个表,其主键为 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 表中出现错误。

我的 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 中的代码。

【问题讨论】:

  • 看看this,也许会有帮助!
  • @OneToMany 更改为 @ManyToMany 后,目前一切正常

标签: java jpa one-to-many persist mysql-error-1062


【解决方案1】:

我通过将关系更改为 @ManyToMany 解决了这个问题。就我而言,它有效。

【讨论】:

    【解决方案2】:

    这可能是因为在保存您的 ItemSet 时,您试图保留此 Set 的相同 Item 值,而您不能这样做。

    【讨论】:

      【解决方案3】:

      您需要使用唯一 ID 保存在数据库中。可能,您的主键在将其保存在数据库中时会重复。尝试做一个自动递增 id

      【讨论】:

      • 如果你的意思是 @GeneratedValue(strategy = GenerationType.AUTO) ?不幸的是,这并没有改变任何东西。发生同样的错误。
      【解决方案4】:

      错误说明您输入的内容,即键“xxxxxx”是重复值。该值存在于您的数据库中,并且您没有为该键保存任何重复值。 为避免此错误,您不应提供任何重复值,否则您必须允许重复值保存该“xxxxx”键的数据。

      【讨论】:

        猜你喜欢
        • 2017-11-28
        • 1970-01-01
        • 2020-02-05
        • 1970-01-01
        • 2018-06-06
        • 2015-03-31
        • 2017-06-22
        • 2017-08-04
        • 1970-01-01
        相关资源
        最近更新 更多