SDN4是否允许集合类型与同一实体的多个关系?

时间:2015-10-30 09:33:43

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

当我尝试获取不同关系类型的集合对象时,即使关系类型(如果不是集合关系类型),集合属性也将检索所有相同的实体类型。这是一个错误吗?

实体Demo包含两个引用用户实体的字段:用户和用户

import java.util.HashSet;
import java.util.Set;

import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
import org.neo4j.ogm.annotation.NodeEntity;
import org.neo4j.ogm.annotation.Relationship;
import org.neo4j.ogm.annotation.RelationshipEntity;

@NodeEntity
public class Demo extends FormLog implements java.io.Serializable {


    private String name;


    @Relationship(type="MY_USER")
    private User user;

    @Relationship(type="DEMO_USERS")
    private Set<User> users = new HashSet<User>();

    public Demo(){}
    public Demo(String name){
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }



    public User getUser() {
        return user;
    }
    public void setUser(User user) {
        this.user = user;
    }
    public Set<User> getUsers() {
        return users;
    }

    public void setUsers(Set<User> users) {
        this.users = users;
    }
    @Override
    public String toString() {
        return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
    }




}

当我使用1“MY_USER”和2“DEMO_USERS”保存演示时,它很好。 但是当我按组ID找到Demo时,“DEMO_USERS”会返回3个用户。

@Test
public void test_saveAndFindOne_save2KindsOfUser_NoConfliction(){

    Demo demo = new Demo();

    List<User> user = userService.findUserByNameLike("Hank");

    demo.setUser(user.get(0));

    demo.getUsers().add(user.get(1));
    demo.getUsers().add(user.get(2));

    demo.setName("Set Multiple");


    demo = demoRepository.save(demo);

    System.out.println("Users size =  "+ demo.getUsers().size());
    System.out.println("==========Get Demo from DB ==============");
    Demo db = demoRepository.findOne(demo.getId());
    System.out.println("Users size =  "+ db.getUsers().size());


}

输出

Users size =  2
==========Get Demo from DB ==============
Users size =  3    

1 个答案:

答案 0 :(得分:0)

这可能是您遇到的问题:https://github.com/neo4j/neo4j-ogm/issues/38

您应该可以通过使用适当的setUser

setUsers@Relationship方法添加注释来解决此问题。

如果这没有帮助,请报告问题(或添加到上面的问题)。

<强>更新: 确认这确实与https://github.com/neo4j/neo4j-ogm/issues/38

中描述的问题相同

在修复此问题之前,您需要使对象可以在两个方向上导航。在您的示例中,User需要有两个Demo引用,每个引用都使用相应的@Relationship

进行注释