实体类是
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。
答案 0 :(得分:0)
这里有一些问题:
@Id
字段需要以某种方式生成(这是异常告诉你的);您可以从添加注释@GeneratedValue(strategy=GenerationType.AUTO)
,Book
未映射(既不是持久的也不是暂时的)。