Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用OpenJPA时事务未处于活动状态_Java_Postgresql_Servlets_Jpa_Openjpa - Fatal编程技术网

Java 使用OpenJPA时事务未处于活动状态

Java 使用OpenJPA时事务未处于活动状态,java,postgresql,servlets,jpa,openjpa,Java,Postgresql,Servlets,Jpa,Openjpa,我的servlet有一个令人沮丧的问题。这是非常基本的,我应该在数据库表中添加一个blog条目,该表有3列(id、tittel(title)、main(mainbody))。我可以从数据库加载并显示在jsp文件中。然而,我无法将数据持久化到数据库中,我也不知道为什么 我使用postgres作为数据库 这是我的“saveBlog”-方法: public void lagreBlogg(Blogg b){ EntityManager em = Persistence.

我的servlet有一个令人沮丧的问题。这是非常基本的,我应该在数据库表中添加一个blog条目,该表有3列(id、tittel(title)、main(mainbody))。我可以从数据库加载并显示在jsp文件中。然而,我无法将数据持久化到数据库中,我也不知道为什么

我使用postgres作为数据库

这是我的“saveBlog”-方法:

public void lagreBlogg(Blogg b){
           EntityManager em =      Persistence.createEntityManagerFactory("kimsBlogg").createEntityManager();
            EntityTransaction transaction = em.getTransaction();

           try {
            transaction.begin();
            em.persist(b);
            transaction.commit();
        } catch (Exception e) {
            transaction.rollback();

        } finally {
            em.close();
        }

    }

}
 @Entity
 @Table(schema = "blogg", name = "blogg")
 public class Blogg {
@Id
@GeneratedValue
private int id;
private String tittel;
private String main;


public Blogg() {

}

public Blogg(String tittel, String main){
    this.tittel= tittel;
    this.main = main;
}

public String getTittel() {
    return tittel;
}

public void setTittel(String tittel) {
    this.tittel = tittel;
}

public String getMain() {
    return main;
}

public void setMain(String main) {
    this.main = main;
}
}
这是我的实体类:

public void lagreBlogg(Blogg b){
           EntityManager em =      Persistence.createEntityManagerFactory("kimsBlogg").createEntityManager();
            EntityTransaction transaction = em.getTransaction();

           try {
            transaction.begin();
            em.persist(b);
            transaction.commit();
        } catch (Exception e) {
            transaction.rollback();

        } finally {
            em.close();
        }

    }

}
 @Entity
 @Table(schema = "blogg", name = "blogg")
 public class Blogg {
@Id
@GeneratedValue
private int id;
private String tittel;
private String main;


public Blogg() {

}

public Blogg(String tittel, String main){
    this.tittel= tittel;
    this.main = main;
}

public String getTittel() {
    return tittel;
}

public void setTittel(String tittel) {
    this.tittel = tittel;
}

public String getMain() {
    return main;
}

public void setMain(String main) {
    this.main = main;
}
}
My persistence.xml

<?xml version="1.0" encoding="UTF-8" ?>
<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence  http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0" xmlns="http://java.sun.com/xml/ns/persistence">

<persistence-unit name="kimsBlogg">
    <provider>org.apache.openjpa.persistence.PersistenceProviderImpl
    </provider>

    <class>no.kim.model.Blogg</class>




    <properties>
        <property name="javax.persistence.jdbc.logging.level" value="INFO" />
        <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" />
        <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/postgres" />
        <property name="javax.persistence.jdbc.user" value="postgres" />
        <property name="javax.persistence.jdbc.password" value="krheggen" />
        <property name="openjpa.RuntimeUnenhancedClasses" value="supported" />
    </properties>
</persistence-unit>

org.apache.openjpa.persistence.PersistenceProviderImpl
不,kim.model.Blogg

这是我得到的错误:

public void lagreBlogg(Blogg b){
           EntityManager em =      Persistence.createEntityManagerFactory("kimsBlogg").createEntityManager();
            EntityTransaction transaction = em.getTransaction();

           try {
            transaction.begin();
            em.persist(b);
            transaction.commit();
        } catch (Exception e) {
            transaction.rollback();

        } finally {
            em.close();
        }

    }

}
 @Entity
 @Table(schema = "blogg", name = "blogg")
 public class Blogg {
@Id
@GeneratedValue
private int id;
private String tittel;
private String main;


public Blogg() {

}

public Blogg(String tittel, String main){
    this.tittel= tittel;
    this.main = main;
}

public String getTittel() {
    return tittel;
}

public void setTittel(String tittel) {
    this.tittel = tittel;
}

public String getMain() {
    return main;
}

public void setMain(String main) {
    this.main = main;
}
}
HTTP状态500-只能在事务处于活动状态时执行操作

类型异常报告

消息只能在事务处于活动状态时执行操作

说明服务器遇到内部错误,无法满足此请求

例外情况

org.apache.openjpa.persistence.InvalidStateException:只能在事务处于活动状态时执行操作。 org.apache.openjpa.kernel.BrokerImpl.assertTransactionOperation(BrokerImpl.java:4732) org.apache.openjpa.kernel.BrokerImpl.rollback(BrokerImpl.java:1543) org.apache.openjpa.kernel.DelegatingBroker.rollback(DelegatingBroker.java:940) org.apache.openjpa.persistence.EntityManagerImpl.rollback(EntityManagerImpl.java:598) no.kim.helpers.BloggDAO.lagreBlogg(BloggDAO.java:37) no.kim.Controller.BloggServlet.doPost(BloggServlet.java:33) javaservlet.http.HttpServlet.service(HttpServlet.java:650) javaservlet.http.HttpServlet.service(HttpServlet.java:731) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

StackTrace

原因:org.apache.openjpa.persistence.PersistenceException:错误:关系“blogg.openjpa_sequence_table”不存在 位置:28{prepstmnt 166406485从blogg.OPENJPA_SEQUENCE_表中选择SEQUENCE_值,其中ID=?FOR UPDATE}[code=0,state=42P01] 位于org.apache.openjpa.jdbc.sql.DBDictionary.窄带(DBDictionary.java:5001) 位于org.apache.openjpa.jdbc.sql.DBDictionary.newStoreException(DBDictionary.java:4961) 位于org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:133) 位于org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:107) 位于org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:59) 位于org.apache.openjpa.jdbc.kernel.AbstractJDBCSeq.next(AbstractJDBCSeq.java:63) 位于org.apache.openjpa.util.ImplHelper.generateValue(ImplHelper.java:159) 位于org.apache.openjpa.util.ImplHelper.generateFieldValue(ImplHelper.java:143) 位于org.apache.openjpa.jdbc.kernel.JDBCStoreManager.assignField(JDBCStoreManager.java:774) 位于org.apache.openjpa.util.ApplicationIds.assign(ApplicationIds.java:492) 位于org.apache.openjpa.util.ApplicationIds.assign(ApplicationIds.java:468) 位于org.apache.openjpa.jdbc.kernel.JDBCStoreManager.assignObjectId(JDBCStoreManager.java:758) 位于org.apache.openjpa.kernel.DelegatingStoreManager.assignObjectId(DelegatingStoreManager.java:135) 位于org.apache.openjpa.kernel.StateManagerImpl.assignObjectId(StateManagerImpl.java:595) 位于org.apache.openjpa.kernel.StateManagerImpl.preFlush(StateManagerImpl.java:3051) 位于org.apache.openjpa.kernel.PNewState.beforeFlush(PNewState.java:44) 位于org.apache.openjpa.kernel.StateManagerImpl.beforeFlush(StateManagerImpl.java:1072) 位于org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:2143) 位于org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:2103) 在org.apache.openjpa.kernel.BrokerImpl.beforepletion(BrokerImpl.java:2021)上 位于org.apache.openjpa.kernel.LocalManagedRuntime.commit(LocalManagedRuntime.java:81) 位于org.apache.openjpa.kernel.BrokerImpl.commit(BrokerImpl.java:1526) 位于org.apache.openjpa.kernel.DelegatingBroker.commit(DelegatingBroker.java:932) 在org.apache.openjpa.persistence.EntityManagerImpl.commit(EntityManagerImpl.java:569)

中,问题在于catch方法中的
“transaction.rollback();”
。如果提交失败并出现异常,则连接不再处于活动状态

关系“blogg.openjpa_sequence_table”不存在


这似乎很简单,只需为表
blogg
创建一个序列,了解更多信息。

问题在于catch方法中的“transaction.rollback();”。请打印出例外情况。如果提交失败并出现异常,则连接不再是activeAdded persistence.xml关于标题,它与servlet无关,它应该类似于“Transaction is not active using OpenJPA”,并提供BloggDAO(错误来自的方法)。第37行是saveBlog方法中的“catch(Exception e){”这一行。您应该在
catch()
块中打印(或记录)异常,而不是忽略它。它很可能会告诉您问题的真正原因。为什么要进行向下投票?这就是解决方案……如果提交失败,它将被回滚(自动)事务处于非活动状态。但是提交应该可以工作。这就是问题所在,我不知道为什么它会转到rollback()。这就是我需要解决的问题,但是异常的stacktrace是什么?在catch(异常e){transaction.rollback();?不,因为行“transaction.rollback();”出现另一个exoption。这是异常:“只能在事务处于活动状态时执行操作”。但您不能从“transaction.commit();}catch(异常e){”行打印异常。请添加一个e.printStacktrace()这是根本原因,而不是transaction.rollback.yes。它的出现是因为注释@GeneratedValue。我不知道您需要更改什么,但请查看openjpa的文档。这里有