首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用spring打破关系-数据-新4j 4.0.0

用spring打破关系-数据-新4j 4.0.0
EN

Stack Overflow用户
提问于 2016-01-10 17:09:39
回答 2查看 148关注 0票数 1

我的项目有一些奇怪的地方,我看不出它是否有错。

我在Spring neo4j (v4.0.0)中使用spring。

我控制器中的这段代码破坏了关系。

代码语言:javascript
复制
@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;
}

正如您在这张图上所看到的:

当我创建USER1时,组织和USER2之间的关系已经被切断了。

在我的申请中我到处都能看到破裂的关系..。我不明白!

neo4j配置

代码语言:javascript
复制
@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");
    }
}

组织域:

代码语言:javascript
复制
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域:

代码语言:javascript
复制
public class WORK_FOR extends Relationship {

    @GraphId
    private Long relationshipId;

    @StartNode
    public User user;

    @EndNode
    public Organization organization;

    public WORK_FOR() {
        super();
    }

}

用户域:

代码语言:javascript
复制
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;

我到处找都找不到任何东西来帮我.

谢谢

EN

回答 2

Stack Overflow用户

发布于 2016-01-12 15:16:57

在初始化请求中,您需要进行几次存储库调用来构造数据库。每个调用都将构造一个新的Session,有效地清除前一个调用中的信息,因为Spring默认为每个请求会话。这很可能是删除现有关系的原因。

如果您将以下bean定义添加到您的配置中,我认为这个问题应该得到解决。

代码语言:javascript
复制
@Override
@Bean
@Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS)
public Session getSession() throws Exception {
    return super.getSession();
}

有关会话范围的更多信息,请参阅文档这里

票数 1
EN

Stack Overflow用户

发布于 2016-01-11 09:58:11

请在Node类上注释传入的关系:

@Relationship(type = "WORK_FOR", Direction = Relationship.INCOMING) WORK_FOR workFor;

根据文档,所有传入的关系都必须完全注释--默认值是传出的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34708335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档