与spring-data-neo4j 4.0.0的关系破裂

时间:2016-01-10 17:09:39

标签: spring neo4j spring-data-neo4j spring-data-neo4j-4

我的项目中有一些奇怪的东西,我不知道它是否有问题。

我使用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;
}

正如您在此图表中看到的那样:

enter image description here

创建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;

我到处寻找,我找不到任何可以帮助我的东西......

谢谢

2 个答案:

答案 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。

相关问题