我的问题是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 ?
答案 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();