从蓝图Vertex获取多个属性

时间:2015-02-23 11:19:42

标签: titan tinkerpop-blueprint

我的问题是com.tinkerpop.blueprints。 Vertex 类不支持多个属性(基数。 SET 或基数。列表) 。要获得此选项,必须使用从 Vertex 扩展的 TitanVertex 类。 我想使用 TransactionRetryHelper 来进行titan数据库事务。

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。 TitanVertex 对象我只能从 TitanGraph 获得,但不能从 TransactionalGraph 获得。 TransactionRetryHelper 的替代方法是什么,允许使用 TitanGraph

1 个答案:

答案 0 :(得分:0)

在对我自己的问题进行更详细的研究之后,我找到了解决方案。在我的情况下tw.getConnection返回 TitanGraph ,它扩展了 TransactionalGraph ,这就是我可以投射(TitanGraph)TransactionalGraph tg并获得 TitanVertex 从它。例如:

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();