我的项目中有一些奇怪的东西,我不知道它是否有问题。
我使用Spring和spring-data-neo4j(v4.0.0)。
我控制器中的这段代码打破了关系。
@RequestMapping("/initialize")
public Object initialize() {
Organization orga = new Organization();
orga.setName("WEAVERS");
this.organizationRepository.save(orga);
User user = new User();
user.setEmail("t.rignoux@gmail.com");
user.setFirst_name("Thierno");
user.setLast_name("Rignoux");
user.setLogin("317");
user.setOrganization(orga);
this.userRepository.save(user);
User user2 = new User();
user2.setEmail("petitenessie@gmail.com");
user2.setFirst_name("Eléonore");
user2.setLast_name("Klein");
user2.setLogin("nessie");
user2.setOrganization(orga);
this.userRepository.save(user2);
Project project = new Project();
project.setName("PROJET 1");
project.setOrganization(orga);
project.setUser(user);
this.projectRepository.save(project);
Project project2 = new Project();
project2.setName("PROJET 2");
project2.setOrganization(orga);
project2.setUser(user2);
this.projectRepository.save(project2);
return orga;
}
正如您在此图表中看到的那样:
创建USER2时,ORGANIZATION与USER1之间的关系已被切断。
我在申请中随处可见的关系破裂......我不明白!
neo4j配置
@EnableTransactionManagement
@Import(RepositoryRestMvcConfiguration.class)
@EnableScheduling
@EnableAutoConfiguration
@ComponentScan(basePackages = {"fr.weavers.loom"})
@Configuration
@EnableNeo4jRepositories(basePackages = "fr.weavers.loom.repositories")
public class LoomNeo4jConfiguration extends Neo4jConfiguration {
public static final String URL = System.getenv("NEO4J_URL") != null ? System.getenv("NEO4J_URL") : "http://localhost:7474";
@Override
public Neo4jServer neo4jServer() {
return new RemoteServer(URL,"neo4j","loomREST2016");
}
@Override
public SessionFactory getSessionFactory() {
return new SessionFactory("fr.weavers.loom.domain");
}
}
组织域名
public class Organization extends Node {
@GraphId
Long id;
String name;
@Relationship(type = "SET_UP", direction = Relationship.OUTGOING)
Set<SET_UP> projects;
@Relationship(type = "WORK_FOR", direction = Relationship.INCOMING)
Set<WORK_FOR> users;
[...]
WORK_FOR域名
public class WORK_FOR extends Relationship {
@GraphId
private Long relationshipId;
@StartNode
public User user;
@EndNode
public Organization organization;
public WORK_FOR() {
super();
}
}
用户域:
public class User extends Node {
@GraphId
Long id;
String login;
@JsonIgnore
String password;
String first_name;
String last_name;
String email;
@Relationship(type = "WORK_FOR")
WORK_FOR workFor;
我到处寻找,我找不到任何可以帮助我的东西......
谢谢
答案 0 :(得分:1)
在初始化请求中,您需要进行多次存储库调用来构建数据库。这些调用中的每一个都将构造一个新的Session
,从而有效地清除前一个的信息,因为Spring配置默认为Session-per-request。这很可能是删除现有关系的原因。
如果将以下bean定义添加到配置中,我认为应该解决该问题。
@Override
@Bean
@Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS)
public Session getSession() throws Exception {
return super.getSession();
}
有关会话范围的更多信息,请参阅文档here。
答案 1 :(得分:0)
请注释Node类上的传入关系:
@Relationship(type = "WORK_FOR", Direction = Relationship.INCOMING)
WORK_FOR workFor;
根据文档,所有INCOMING关系必须完全注释 - 默认为OUTGOING。