gpt4 book ai didi

java - Neo4jSession 不会将 NodeEntity 识别为 Spring MVC 模块中的持久类

转载 作者:行者123 更新时间:2023-12-01 18:10:21 29 4
gpt4 key购买 nike

我正在开发一个多模块项目,其中包括

  • rest - 一个Spring MVC模块,其中包含@RestControllers等。
  • core - 使用 Spring Data Neo4J 4 的模块,包含我所有的 @Services@Repositories等等

核心模块中的所有单元测试均按预期工作,并成功保留所有实体

但是当调用任何@RestController方法时,domain实体无法持久化,并且我收到以下消息:

INFO org.neo4j.ogm.session.Neo4jSession - server.core.domain.nodes.User 不是可持久类的实例

核心模块配置类

@EnableTransactionManagement
@Configuration
@ImportResource({"classpath:spring-config.xml"})
@EnableNeo4jRepositories(basePackages = "server.core.repositories")
public class MyNeo4jConfiguration extends Neo4jConfiguration {


@Override
public Neo4jServer neo4jServer() {
return new RemoteServer(url, user, pass);
}


@Override
public SessionFactory getSessionFactory() {
return new SessionFactory("server.core.domain");
}
}

web.xml

<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<display-name>Rest</display-name>

<servlet>
<servlet-name>rest</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
WEB-INF/rest-servlet.xml
</param-value>
</context-param>

<servlet-mapping>
<servlet-name>rest</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>

WEB-INF/rest-servlet.xml

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">

<bean class="server.core.MyNeo4jConfiguration" />
<context:component-scan base-package="rest"/>
<mvc:annotation-driven />
<context:annotation-config />



<bean name="jsonTemplate" class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"/>
</beans>

Controller

@RestController
public class UserController {
@Autowired
IUserService userService;

@RequestMapping(value = "/create-user", method = RequestMethod.GET)
public ResponseEntity<?> createUser() {
User user = userService.createOrUpdateUser(new User("john", "doe")); //does not persist user
HttpHeaders httpHeaders = new HttpHeaders();
return new ResponseEntity<>(user, httpHeaders, HttpStatus.ACCEPTED);
}
}

UserService.java

@Service("userService")
public class UserService implements IUserService {

@Autowired
UserRepository userRepository; // extends GraphRepository

@Override
public User createOrUpdateUser(User user){
user.setStatus(AppEnums.NodeStatus.ACTIVE);
return userRepository.save(user);
}
}

最佳答案

INFO org.neo4j.ogm.session.Neo4jSession - server.core.domain.nodes.User is not an instance of a persistable class

表示 User 类所在的包路径由 SessionFactory 构造函数 @Bean 提供(或扫描)。

因此,请确保在您的 Rest 应用程序中,您正在使用正确/预期的根包路径初始化您在 stackoverflow 问题中发布的 SessionFactory...。

在整个项目上执行文件/字符串搜索“SessionFactory”以进行验证。

<小时/>

此外,这是 SessionFactory 构造函数的 java 文档,它表明可以将多个路径作为参数传递,并且所有子包也将被扫描。此外,可以将特定的类传递到参数中...

@Override
public SessionFactory getSessionFactory() {
return new SessionFactory("server.core.domain");
}

org.neo4j.ogm.session.SessionFactory.SessionFactory(字符串...包)

/**
* Constructs a new {@link SessionFactory} by initialising the object-graph mapping meta-data from the given list of domain
* object packages.
* <p>
* The package names passed to this constructor should not contain wildcards or trailing full stops, for example,
* "org.springframework.data.neo4j.example.domain" would be fine. The default behaviour is for sub-packages to be scanned
* and you can also specify fully-qualified class names if you want to cherry pick particular classes.
* </p>
*
* @param packages The packages to scan for domain objects
*/
<小时/>

此外,4.0.0.M1 中存在一个与此相关的错误,但根据 jira 的说法,该错误已在 4.0.0.RC1 中修复

https://jira.spring.io/browse/DATAGRAPH-657

这可能仍然是一个错误...出于测试目的,尝试将以下参数传递给您的 SessionFactory。

“server.core.domain.nodes”

server.core.domain.nodes.User

看看这是否会使错误消失。

关于java - Neo4jSession 不会将 NodeEntity 识别为 Spring MVC 模块中的持久类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33509901/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com