【发布时间】:2015-11-10 10:45:36
【问题描述】:
编辑
由于我暂时没有得到答复,而我打开的 github Ticket 有 已关闭,我将在 github 上创建一个示例来重现该错误 找出问题所在。一旦问题得到解决,我将添加我的 自己回答这个问题以提供真正的解决方案。
首先,我将此报告为issue on SDN's Github。
无论如何,我在这里发布我的问题,看看是否有人有解决方案。
所以,我有一个 Player 模型:
@NodeEntity
public class Player {
@GraphId Long id;
String name;
String email;
@Transient
String password;
int elo = 1200;
@RelatedTo(type="FRIEND_WITH", direction = Direction.BOTH)
Set<Player> friends = new HashSet<Player>();
//After this I have Getters and Setters
//no need to paste them all I guess
}
及其存储库接口:
@RepositoryRestResource(collectionResourceRel="player", path="player")
public interface PlayerRepository extends PagingAndSortingRepository<Player, Long> {
}
我使用 POST 请求创建了两个播放器,并验证了它们确实是使用 GET 创建的。
然后我想将玩家 0 添加为玩家 1 的朋友:
curl -i -X POST -H 'Content-type: text/uri-list' -d 'localhost:8080/api/player/1' http://localhost:8080/api/player/0/friends
我得到一个例外:
HTTP/1.1 500 Internal Server Error
Server: Apache-Coyote/1.1
Content-Type: application/hal+json;charset=UTF-8
Transfer-Encoding: chunked
Date: Mon, 09 Nov 2015 16:20:24 GMT
Connection: close
{
"timestamp" : "2015-11-09T16:20:24.844+0000",
"status" : 500,
"error" : "Internal Server Error",
"exception" : "org.neo4j.graphdb.NotInTransactionException",
"message" : "No message available",
"path" : "/api/player/0/friends"
}
要查看完整的堆栈跟踪,请查看问题顶部的 Github 链接,此处太长无法阅读。
以防万一,这是我的 pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<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>org.afkgames</groupId>
<artifactId>api-rest-sdn</artifactId>
<version>0.1.0</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.0.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-neo4j</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
</dependencies>
<properties>
<java.version>1.8</java.version>
<start-class>api.Bootstrap</start-class>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>http://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>neo4j</id>
<name>Neo4j</name>
<url>http://m2.neo4j.org/</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-snapshots</id>
<url>http://repo.spring.io/snapshot</url>
</pluginRepository>
</pluginRepositories>
</project>
编辑: 我试图在我的存储库界面上添加@Transactional,它失败并出现同样的错误。
【问题讨论】:
-
你可以尝试在你的存储库方法中添加一个@Transactional
-
@MichaelHunger 我试过了,编辑主题以添加答案,但它不起作用:/得到完全相同的异常
-
Yore're 在 curl 调用中使用 POST,这意味着它正在创建新的东西,因此它可能需要事务。您可以发布您的 REST 方法和为 POST 调用的相应 DAO 方法吗? findByName 很可能会在 REST GET 方法中调用,而不是在 POST 中调用,因此它的代码对调试问题没有太大帮助。
-
这些方法是spring-rest创建的,其实我创建findByname方法只是为了测试,没有这个方法一切正常。
-
对于
spring-boot-starter-parent版本,请尝试使用“1.3.0.RELEASE”。
标签: neo4j spring-data-neo4j spring-data-rest