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

时间:2015-11-16 08:57:52

标签: jpa openjpa tomee

实体类是

        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   Connector Java mysql-connector-java-5.1.37(修订版:   09940f05b4c98150f352e787a2549f11a2e9d       a93))。       2015年11月16日下午2:08:03 null       信息:使用JDBC驱动程序连接到MySQL 5.5版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”。如果是这样的话   一个新实例,确保任何版本和/或自动生成        持久化时,主键字段为null / default。        org.apache.openjpa.persistence.EntityExistsException:尝试   坚持分离的对象“com.dunkul.entity.Book@1c7cf37d”。如果是这样的话   一个       新实例,确保持久化时任何版本和/或自动生成的主键字段为空/默认值。       FailedObject: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)

请帮忙。表格有2列.. Id和Name。 Id是PK和NN 名称是VARCHAR(45)。 Name的默认值为NULL。

1 个答案:

答案 0 :(得分:0)

这里有一些问题:

  • 实体名称是" Book",但它映射到的表是" employee&#34 ;;本身不是错误,但它是否打算?
  • 你的@Id字段需要以某种方式生成(这是异常告诉你的);您可以从添加注释@GeneratedValue(strategy=GenerationType.AUTO)
  • 开始
  • 属性" name" Book未映射(既不是持久的也不是暂时的)。