当我尝试获取不同关系类型的集合对象时,即使关系类型(如果不是集合关系类型),集合属性也将检索所有相同的实体类型。这是一个错误吗?
实体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
答案 0 :(得分:0)
这可能是您遇到的问题:https://github.com/neo4j/neo4j-ogm/issues/38
您应该可以通过使用适当的setUser
setUsers
和@Relationship
方法添加注释来解决此问题。
如果这没有帮助,请报告问题(或添加到上面的问题)。
<强>更新强>: 确认这确实与https://github.com/neo4j/neo4j-ogm/issues/38
中描述的问题相同在修复此问题之前,您需要使对象可以在两个方向上导航。在您的示例中,User
需要有两个Demo
引用,每个引用都使用相应的@Relationship