0

我的问题是 com.tinkerpop.blueprints。Vertex类不支持多个属性(Cardinality.SETCardinality.LIST 。要获得此选项,必须使用从Vertex扩展的TitanVertex类。我想使用TransactionRetryHelper进行 Titan DB 事务。

User user = new TransactionRetryHelper.Builder<User>(tw.getConnection())
    .perform(new TransactionWork<User>() {
        @Override
        public User execute(final TransactionalGraph tg) throws Exception {
            return userDao.getUser(tg, userId);
        }
    }).build().oneAndDone();

但在这种情况下,TransactionWork 接口传递 TransactionalGraph 来执行方法,而不是扩展 TransactionalGraph 的 TitanGraph。我只能从TitanGraph而不能从TransactionalGraph获得TitanVertex对象。允许使用TitanGraph的TransactionRetryHelper的替代方法是什么?

4

1 回答 1

0

在对我自己的问题进行更详细的研究后,我找到了解决方案。在我的情况下,tw.getConnection返回扩展TransactionalGraph的TitanGraph ,这就是我可以从中转换和获取TitanVertex的原因。例如:(TitanGraph)TransactionalGraph tg

User user = new TransactionRetryHelper.Builder<User>(tw.getConnection())
.perform(new TransactionWork<User>() {
    @Override
    public User execute(final TransactionalGraph tg) throws Exception {
        TitanVertex vertex = ((TitanGraph)tg).getVertices(USER_ID, userId).iterator().next();
        User u = new User(vertex.getProperty(USER_ID));//Property USER_ID has Cardinality.SINGLE
        StringBuilder fullName = new StringBuilder();
        for (TitanProperty titanProperty : vertex.getProperties(NAME)) {//Property NAME has Cardinality.LIST
            fullName.append((String)titanProperty.getProperty(NAME));
        }
        u.setFullName(fullName);
        /*set other properties for User
        ...
        */
        return u;
    }
}).build().oneAndDone();
于 2015-02-25T08:14:17.277 回答