край обновления orientdb sql?

Я возился с orientdb sql, и мне было интересно, есть ли способ обновить ребро вершины вместе с некоторыми данными о нем.

предполагая, что у меня есть следующие данные: вершина: человек, край комнаты: внутри (от человека к комнате)

что-то типа:

UPDATE Persons SET phone=000000, out_Inside=(
    select @rid from Rooms where room_id=5) where person_id=8

очевидно, вышеперечисленное не работает. Выдает исключение:

Error: java.lang.ClassCastException: com.orientechnologies.orient.core.id.ORecordId cannot be cast to com.orientechnologies.orient.core.db.record.ridbag.ORidBag

Я попытался просмотреть исходники на github в поисках синтаксиса для сумки с 1 элементом, но ничего не нашел (нашел %, но это, похоже, для сериализации, а не для SQL).

(1) Есть ли способ сделать это тогда? как обновить соединение? Есть ли способ, или я вынужден создать новый край, а старый удалить?

(2) Когда я писал это, мне пришло в голову, что, возможно, ребра в этом случае не подходят. Возможно, мне следует использовать вместо этого ССЫЛКУ. Я должен сказать, что не уверен, когда использовать какой, или каковы последствия использования любого из них. Я нашел это, хотя:

https://groups.google.com/forum/#!topic/orient-database/xXlNNXHI1UE

комментарий 3 сверху, Lvc@, где он говорит:

"The suggested way is to always create an edge for relationships"

Кроме того, даже если я должен использовать ссылку, пожалуйста, ответьте на (1). В любом случае, я был бы рад узнать ответ.

p.s. В моем сценарии человек может находиться только в одной комнате. Это скорее всего не изменится в будущем. Очевидно, что край имеет то преимущество, что в случае, если я захочу изменить его (каким бы маловероятным это ни было), это будет очень легко.

Решение (частичное)

(1) Решение состояло в том, чтобы просто удалить выбор поля. Спасибо за Lvca за указание на это!

(2) --Все еще не уверен--


person saw    schedule 12.10.2014    source источник


Ответы (2)


Команды CREATE EDGE и DELETE EDGE имеют эту цель: не допустить, чтобы пользователь боролся с базовой структурой.

Однако, если вы хотите сделать это (немного «грязно»), попробуйте следующее:

UPDATE Persons SET phone=000000, out_Inside=(
  select from Rooms where room_id=5) where person_id=8
person Lvca    schedule 14.10.2014
comment
Спасибо! это, кажется, работает. Однако есть ли шанс, что вы сможете ответить и на (2)? - person saw; 16.10.2014

update EDGE Custom_Family_Of_Custom 
set survey_status = '%s', 
apply_source = '%s' 
where @rid in (
select level1_e.@rid from (
MATCH {class: Custom, as: custom, where: (custom_uuid = '%s')}.bothE('Custom_Family_Of_Custom') {as: level1_e} .bothV('Custom') {as: level1_v, where: (custom_uuid = '%s')} return level1_e
)
)

это работает хорошо

person shanshan xu    schedule 26.02.2019
comment
Пожалуйста, предоставьте некоторые пояснения к вашему коду. - person Partho63; 26.02.2019