Neo4j 지속성을 위해 Dog/Breed example from the docs 작업을하려고합니다. 데이터베이스는 정상적으로 생성되지만 데이터는 플러시 될 수 없습니다. 위의 DogBreedRunner.java 클래스에서 org.neo4j.graphdb.NotInTransactionExceptionem.flush() 명령어를 가져오고 있습니다.데이터 플러시 오류 org.neo4j.graphdb.NotInTransactionExcept
나는 인터넷 검색을 시도했지만 실제로 문제를 해결할 수 없었다. 여기에 내 프로젝트 (나는 문서에서 자바 클래스를 만지지 않았다)입니다.
누군가 도와 줄 수 있습니까? 다른 정보가 필요한지 알려주십시오.
의 persistence.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"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="ogm-jpa-tutorial" transaction-type="JTA">
<!-- Use Hibernate OGM provider: configuration will be transparent -->
<provider>org.hibernate.ogm.jpa.HibernateOgmPersistence</provider>
<properties>
<property name="hibernate.ogm.datastore.provider" value="neo4j_embedded" />
<property name="hibernate.ogm.neo4j.database_path" value="C:/Neo4j/NEO4J_HOME/data/graph.db" />
<!-- defines which JTA Transaction we plan to use -->
<property name="hibernate.transaction.jta.platform"
value="org.hibernate.service.jta.platform.internal.JBossStandAloneJtaPlatform"/>
</properties>
</persistence-unit>
</persistence>
Dog.java
package org.hibernate.ogm.examples.gettingstarted.domain;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.TableGenerator;
@Entity
public class Dog {
@Id @GeneratedValue(strategy = GenerationType.TABLE, generator = "dog")
@TableGenerator(
name = "dog",
table = "sequences",
pkColumnName = "key",
pkColumnValue = "dog",
valueColumnName = "seed"
)
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
private Long id;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
private String name;
@ManyToOne
public Breed getBreed() { return breed; }
public void setBreed(Breed breed) { this.breed = breed; }
private Breed breed;
}
Bread.java
package org.hibernate.ogm.examples.gettingstarted.domain;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import org.hibernate.annotations.GenericGenerator;
@Entity
public class Breed {
@Id @GeneratedValue(generator = "uuid")
@GenericGenerator(name="uuid", strategy="uuid2")
public String getId() { return id; }
public void setId(String id) { this.id = id; }
private String id;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
private String name;
}
DogBreedRunner.java
package org.hibernate.ogm.examples.gettingstarted;
import org.hibernate.ogm.examples.gettingstarted.domain.Breed;
import org.hibernate.ogm.examples.gettingstarted.domain.Dog;
import org.hibernate.ogm.util.impl.Log;
import org.hibernate.ogm.util.impl.LoggerFactory;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.transaction.TransactionManager;
import java.lang.reflect.InvocationTargetException;
public class DogBreedRunner {
private static final String JBOSS_TM_CLASS_NAME = "com.arjuna.ats.jta.TransactionManager";
private static final Log logger = LoggerFactory.make();
public static void main(String[] args) {
TransactionManager tm = getTransactionManager();
//build the EntityManagerFactory as you would build in in Hibernate Core
EntityManagerFactory emf = Persistence.createEntityManagerFactory("ogm-jpa-tutorial");
//Persist entities the way you are used to in plain JPA
try {
tm.begin();
logger.infof("About to store dog and breed");
EntityManager em = emf.createEntityManager();
Breed collie = new Breed();
collie.setName("Collie");
em.persist(collie);
Dog dina = new Dog();
dina.setName("Dina");
dina.setBreed(collie);
em.persist(dina);
Long dinaId = dina.getId();
logger.infof("About to commit");
em.flush();
em.close();
tm.commit();
//Retrieve your entities the way you are used to in plain JPA
logger.infof("About to retrieve dog and breed");
tm.begin();
em = emf.createEntityManager();
dina = em.find(Dog.class, dinaId);
logger.infof("Found dog %s of breed %s", dina.getName(), dina.getBreed().getName());
em.flush();
em.close();
tm.commit();
emf.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static TransactionManager getTransactionManager() {
try {
Class<?> tmClass = DogBreedRunner.class.getClassLoader().loadClass(JBOSS_TM_CLASS_NAME);
return (TransactionManager) tmClass.getMethod("transactionManager").invoke(null);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return null;
}
}
,536,913 63,210
의 pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>hibernate-ogm-documentation-examples</groupId>
<artifactId>HibernateOMG</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<description>Full code for the Getting Started Guide</description>
<url>http://ogm.hibernate.org</url>
<dependencies>
<!-- Hibernate OGM dependency -->
<dependency>
<groupId>org.hibernate.ogm</groupId>
<artifactId>hibernate-ogm-core</artifactId>
<version>4.1.0.Beta5</version>
</dependency>
<!-- standard APIs dependencies - provided in a Java EE container -->
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.0-api</artifactId>
<version>1.0.1.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate.ogm</groupId>
<artifactId>hibernate-ogm-neo4j</artifactId>
<version>4.1.0.Beta5</version>
</dependency>
<dependency>
<groupId>org.jboss.spec.javax.transaction</groupId>
<artifactId>jboss-transaction-api_1.1_spec</artifactId>
<version>1.0.0.Final</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>javax.persistence</artifactId>
<version>2.1.0</version>
<type>jar</type>
</dependency>
<!-- JBoss Transactions dependency -->
<dependency>
<groupId>org.jboss.jbossts</groupId>
<artifactId>jbossjta</artifactId>
<version>4.16.4.Final</version>
</dependency>
</dependencies>
</project>
예외 :
org.neo4j.graphdb.NotInTransactionException org.neo4j.kernel.impl.persistence.PersistenceManager.getCurrentTransaction에서 (PersistenceManager.java:284) org.neo4j.kernel.impl.persistence.PersistenceManager.currentKernelTransactionForReading (PersistenceManager.java:230)에서 org.neo4j.kernel.impl.persistence.PersistenceManager.getResource (PersistenceManager.java:249) 에서,691,363 에서 org.neo4j.kernel.impl.core.ThreadToStatementContextBridge.transaction org.neo4j.kernel.impl.core.ThreadToStatementContextBridge.instance (ThreadToStatementContextBridge.java:47)에서 (ThreadToStatementContextBridge.java:53) 210 조직도 org.hibernate.ogm에서 .neo4j.kernel.impl.core.NodeProxy.setProperty org.hibernate.ogm.datastore.neo4j.Neo4jDialect.putTupleOperation (Neo4jDialect.java:373)에서 (NodeProxy.java:203) 에서 org.hibernate.ogm.datastore.neo4j.Neo4jDialect.applyTupleOperations (Neo4jDialect.java:348) 에서 .datastore.neo4j.Neo4jDialect.applyOperation (Neo4jDialect.java:355) 또는 g.hibernate.ogm.datastore.neo4j.Neo4jDialect.updateTuple org.hibernate.action에서 org.hibernate.ogm.persister.OgmEntityPersister.insert (OgmEntityPersister.java:928) 에서 (Neo4jDialect.java:123) . internal.EntityInsertAction.execute org.hibernate.engine.spi.ActionQueue.executeActions (ActionQueue.java:463) org.hibernate.engine.spi.ActionQueue.executeActions에서 에서 (EntityInsertAction.java:104) (ActionQueue. java : 349) at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions (AbstractFlushingEventListener.java:350) at org.hibernate.event.internal. org.hibernate.jpa.spi.AbstractEntityManagerImpl.flush (AbstractEntityManagerImpl.java:1335)에서 org.hibernate.internal.SessionImpl.flush (SessionImpl.java:1222) 에서 DefaultFlushEventListener.onFlush (DefaultFlushEventListener.java:56) org.hibernate.ogm.examples.gettingstarted.DogBreedRunner.main (DogBreedRunner.java:40)에서 org.hibernate.ogm.jpa.impl.OgmEntityManager.flush (OgmEntityManager.java:119) 에서