Получить несколько свойств из чертежей Vertex
Моя проблема в том, что com.tinkerpop.blueprints. Класс вершин не поддерживает несколько свойств (Cardinality. SET или Cardinality. LIST). Чтобы получить эту опцию, необходимо использовать класс TitanVertex, который выходит из Vertex. Я хочу использовать 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 для выполнения метода, а не TitanGraph, который расширяет TransactionalGraph. Объект TitanVertex, который я могу получить только из TitanGraph, но не из TransactionalGraph. Какая альтернатива TransactionRetryHelper позволяет использовать TitanGraph?
1 ответ
После более подробного исследования моей собственной проблемы я нашел решение. В моем случае 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();