Получить несколько свойств из чертежей 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();
Другие вопросы по тегам