org.apache.openjpa.persistence.EntityExistsException:尝试持久化分离的对象

org.apache.openjpa.persistence.EntityExistsException:尝试持久化分离的对象,jpa,openjpa,apache-tomee,Jpa,Openjpa,Apache Tomee,实体类是 package com.dunkul.entity; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EntityListeners; import javax

实体类是

        package com.dunkul.entity;

            import java.io.Serializable;
            import javax.persistence.Column;
            import javax.persistence.Entity;
            import javax.persistence.EntityListeners;
            import javax.persistence.GeneratedValue;
            import javax.persistence.GenerationType;
            import javax.persistence.Id;
            import javax.persistence.Table;

            @Entity
            @Table(name="employee")
            public class Book implements Serializable{

               private int id;
               private String name;

               public Book(){        
               }

               @Id

               @Column(name="Id")
               public int getId() {
                  return id;
               }

               public void setId(int id) {
                  this.id = id;
               }

               public String getName() {
                  return name;
               }

               public void setName(String name) {
                  this.name = name;
               }    
            }
坚持如下

           public void addBook(Book book) {
              entityManager.persist(book);
           }    
获取以下异常

信息:使用字典类 “org.apache.openjpa.jdbc.sql.MySQLDictionary”(MySQL 5.7.9-log,MySQL 连接器Java-mysql-Connector-Java-5.1.37(修订版: 09940f05b4c98150f352e787a2549f11a2e9d (a93))。 2015年11月16日下午2:08:03无效 信息:使用JDBC驱动程序MySQL连接器Java版本MySQL-Connector-Java-5.1.37(版本: 09940f05b4c98150f352e787a2549f11a2e9da93)。 2015年11月16日下午2:08:04 org.apache.openejb.core.transaction.EjbTransactionUtil handleSystemException 严重:EjbTransactionUtil.handleSystemException:尝试持久化分离的对象“com.dunkul.entity”。Book@1c7cf37d". 如果这是 新实例,请确保任何版本和/或自动生成 持久化时,主键字段为空/默认值。 org.apache.openjpa.persistence.EntityExistsException:尝试 持久化分离对象“com.dunkul.entity”。Book@1c7cf37d". 如果这是 A. 新建实例时,请确保任何版本和/或自动生成的主键字段在持久化时为空/默认值。 失败对象:com.dunkul.entity。Book@1c7cf37d 位于org.apache.openjpa.kernel.BrokerImpl.persistInternal(BrokerImpl.java:2659) 位于org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2602) 位于org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2585)

请帮忙。TableBook有两列。。身份证和姓名。Id是PK和NN
名字叫瓦查尔(45岁)。Name的默认值为NULL。

这里有几个问题:

  • 实体名称为“Book”,但映射到的表为“employee”;这本身不是一个错误,但它是有意的吗
  • 您的
    @Id
    字段需要以某种方式生成(这是异常告诉您的);您可以先添加注释
    @GeneratedValue(strategy=GenerationType.AUTO)
  • Book
    的属性“name”未映射(既不是持久的,也不是暂时的)

    • 这里有几个问题:

      • 实体名称为“Book”,但映射到的表为“employee”;这本身不是一个错误,但它是有意的吗
      • 您的
        @Id
        字段需要以某种方式生成(这是异常告诉您的);您可以先添加注释
        @GeneratedValue(strategy=GenerationType.AUTO)
      • Book
        的属性“name”未映射(既不是持久的,也不是暂时的)

      您保存的id为10的书籍已经存在数据库中没有id为10的书籍。我将10修改为101、201,得到了相同的异常。您保存了一本id为10的书,它已经存在数据库中没有id为10的书。我将10修改为101、201,得到了相同的异常。谢谢。。像下面这样修改解决了我的问题@GeneratedValue(strategy=GenerationType.IDENTITY)@Column(name=“Id”)public int getId(){return Id;}我还有一个问题,如果我不想使用任何@GeneratedValue(strategy=GenerationType.IDENTITY)注释并将@Id值设置为我自己的值,该怎么办?我不确定您想要实现什么。为了提高效率,必须由数据库生成ID。如果“id”字段不是id,请不要将其标记为id。谢谢。。像下面这样修改解决了我的问题@GeneratedValue(strategy=GenerationType.IDENTITY)@Column(name=“Id”)public int getId(){return Id;}我还有一个问题,如果我不想使用任何@GeneratedValue(strategy=GenerationType.IDENTITY)注释并将@Id值设置为我自己的值,该怎么办?我不确定您想要实现什么。为了提高效率,必须由数据库生成ID。如果字段“id”不是id,请不要将其标记为id。