我跟踪了一下程序,发现就是在初始化EntityManagerFactory工厂的时候,报错!
在数据库里面我最开始是建立好了相应的表,以为openJPA会自动反响映射,后来删了该表。这样还是报同样的错
Exception in thread "main" <openjpa-1.0.0-r420667:568756 nonfatal general error> org.apache.openjpa.persistence.PersistenceException: ORA-00955: 名称已由现有对象使用
{stmnt 20928577 CREATE TABLE OPENJPA_SEQUENCE_TABLE (ID NUMBER NOT NULL, SEQUENCE_VALUE NUMBER, PRIMARY KEY (ID))} [code=955, state=42000]
at org.apache.openjpa.jdbc.meta.MappingTool.record(MappingTool.java:549)
at org.apache.openjpa.jdbc.meta.MappingTool.record(MappingTool.java:449)
at org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.synchronizeMappings(JDBCBrokerFactory.java:170)
at org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.newBrokerImpl(JDBCBrokerFactory.java:130)
at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:186)
at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:142)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager这是省掉属性的get/set方法的实体类@Entity
@Table(name="PERSON")
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "ID")
private long id; @Column(name = "NAME", nullable = false)
private String name; @Column(name = "AGE", nullable = false)
private int age; @Column(name = "ADDRESS")
private String address;
}persistent.xml文件<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0">
<persistence-unit name="orcl">
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
<class>com.cn.bsm.test.jpa.model.Person</class>
<properties>
<property name="openjpa.ConnectionURL" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl"/>
<property name="openjpa.ConnectionDriverName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="openjpa.ConnectionUserName" value="system"/>
<property name="openjpa.ConnectionPassword" value="orcl"/>
<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
<property name="openjpa.Log" value="DefaultLevel=ERROR"/>
</properties>
</persistence-unit>
</persistence>
EntityManager类public class BaseEntityManager { private static final Properties jpaPropertites = new Properties(); private static final String DEFAULT_DATABASE = "orcl"; private static EntityManagerFactory entityManagerFactory = null; private static EntityManager entityManager = null; public static Properties getJpapropertites() {
return jpaPropertites;
} public static EntityManagerFactory getEntityManagerFactory() {
entityManagerFactory = Persistence.createEntityManagerFactory(
DEFAULT_DATABASE, jpaPropertites);
return entityManagerFactory;
} public static EntityManager getEntityManager() {
if (entityManagerFactory == null) {
entityManagerFactory = getEntityManagerFactory();
}
entityManager = entityManagerFactory.createEntityManager();
return entityManager;
} public static EntityTransaction getTransaction() {
if (entityManager == null) {
entityManager = getEntityManager();
}
return entityManager.getTransaction();
}
public static void close(){
if(entityManager!=null){
entityManager.close();
}
if(entityManagerFactory!=null){
entityManagerFactory.close();
}
}
}
在数据库里面我最开始是建立好了相应的表,以为openJPA会自动反响映射,后来删了该表。这样还是报同样的错
Exception in thread "main" <openjpa-1.0.0-r420667:568756 nonfatal general error> org.apache.openjpa.persistence.PersistenceException: ORA-00955: 名称已由现有对象使用
{stmnt 20928577 CREATE TABLE OPENJPA_SEQUENCE_TABLE (ID NUMBER NOT NULL, SEQUENCE_VALUE NUMBER, PRIMARY KEY (ID))} [code=955, state=42000]
at org.apache.openjpa.jdbc.meta.MappingTool.record(MappingTool.java:549)
at org.apache.openjpa.jdbc.meta.MappingTool.record(MappingTool.java:449)
at org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.synchronizeMappings(JDBCBrokerFactory.java:170)
at org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.newBrokerImpl(JDBCBrokerFactory.java:130)
at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:186)
at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:142)
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager这是省掉属性的get/set方法的实体类@Entity
@Table(name="PERSON")
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "ID")
private long id; @Column(name = "NAME", nullable = false)
private String name; @Column(name = "AGE", nullable = false)
private int age; @Column(name = "ADDRESS")
private String address;
}persistent.xml文件<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0">
<persistence-unit name="orcl">
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
<class>com.cn.bsm.test.jpa.model.Person</class>
<properties>
<property name="openjpa.ConnectionURL" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl"/>
<property name="openjpa.ConnectionDriverName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="openjpa.ConnectionUserName" value="system"/>
<property name="openjpa.ConnectionPassword" value="orcl"/>
<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
<property name="openjpa.Log" value="DefaultLevel=ERROR"/>
</properties>
</persistence-unit>
</persistence>
EntityManager类public class BaseEntityManager { private static final Properties jpaPropertites = new Properties(); private static final String DEFAULT_DATABASE = "orcl"; private static EntityManagerFactory entityManagerFactory = null; private static EntityManager entityManager = null; public static Properties getJpapropertites() {
return jpaPropertites;
} public static EntityManagerFactory getEntityManagerFactory() {
entityManagerFactory = Persistence.createEntityManagerFactory(
DEFAULT_DATABASE, jpaPropertites);
return entityManagerFactory;
} public static EntityManager getEntityManager() {
if (entityManagerFactory == null) {
entityManagerFactory = getEntityManagerFactory();
}
entityManager = entityManagerFactory.createEntityManager();
return entityManager;
} public static EntityTransaction getTransaction() {
if (entityManager == null) {
entityManager = getEntityManager();
}
return entityManager.getTransaction();
}
public static void close(){
if(entityManager!=null){
entityManager.close();
}
if(entityManagerFactory!=null){
entityManagerFactory.close();
}
}
}
解决方案 »
- SSH整合过程中,Action中无法获得service类的实例
- Weblogic无法启动?请教各位高手帮忙看下
- spring+mybatis配置多数据源报错
- 关与JAVA实现文件上传下载的问题
- 帮忙看下这个异常(在线等)
- struts标签问题<html:select>
- 请问在EJB QL中如何实现模糊查询
- 请教:如何正确的配置apache+tomcat??
- 无法访问云服务器上的nginx
- 利用FTPfile.listfile()方法把现有文件夹文件队列化,但是目前文件夹中文件非常多,在执行此方法时经常进入假死状态
- sql语句如何放到xml spring2.5
- 用java 写webservice 能得到wsdl结构,在用httpclient调用出错,为什么?
还有关键字冲突的可能?
原来问题出在这里
@Entity
@Table(name="PERSON")在此它每次实现一个实例的时候,它都自动根据注释去生成一个Person表。所以就引发了错误。
我去掉了Table现在就没问题了