首页 文章

SpringData neo4j节点属性未填充

提问于
浏览
0

我有一个简单的关系(帐户) - [IdentifiedBy] - >(身份),定义如下

@RelatedTo(type = "IDENTIFIED_BY", direction = Direction.OUTGOING)
private Set<Identity> identities = new HashSet<Identity>();

当我加载帐户并访问其身份时,会加载所有身份,但除ID以外的所有属性都为空 . 但是,如果我使用@Fetch注释该属性,那么将使用所有属性正确加载标识 . 这是设计还是我错过了什么?

@NodeEntity
public class Account {
    @GraphId Long nodeId;

    @RelatedTo(type = "IDENTIFIED_BY", direction = Direction.OUTGOING)
    //@Fetch
    private Set<Identity> identities = new HashSet<Identity>();

    public Set<Identity> getIdentities() {
        return identities;
    }

    public void setIdentities(Set<Identity> identities) {
        this.identities = identities;
    }
}

@NodeEntity
public class Identity {
    @GraphId Long nodeId;

    private String identifier;

    public String getIdentifier() {
        return identifier;
    }

    public void setIdentifier(String identifier) {
        this.identifier = identifier;
    }
}

public interface AccountRepository extends GraphRepository<Account> { }

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"/test-context.xml"})
@Transactional
public class AccountTests {

    @Autowired
    protected AccountRepository accountRepository;

    @Test
    public void accountMustLoadItsIdentities() {
        Account acct = accountRepository.save(new Account());

        Identity id = new Identity();
        id.setIdentifier("merlin");
        acct.getIdentities().add(id);
        accountRepository.save(acct);

        acct = accountRepository.findOne(acct.nodeId);
        id = acct.getIdentities().iterator().next();
        assertEquals("merlin", id.getIdentifier());
    }    
}

单元测试在最后一个断言上失败,但如果取消注释帐户上的@Fetch,则成功 .

2 回答

  • 0

    而不是使用

    account.getIdentities()
    

    你应该做以下的事情:

    this.neo4jTemplate.fetch(account.getIdentities())
    

    不使用@Fetch关键字不会自动启用延迟加载 . 要延迟加载属性,请使用上面绘制的Neo4jTemplate .

  • 2

    这是设计的

    我们试图通过不热切地关注关系来避免将整个图形加载到内存中 . 如果加载了相关实体,则专用的@Fetch批注控制 . 每当实体未完全加载时,只存储其id . 然后可以使用template.fetch()操作显式加载这些实体或实体集合 .

    http://static.springsource.org/spring-data/data-graph/snapshot-site/reference/html/#reference:simple-mapping

相关问题