У меня есть таблица Cassandra, которая включает определенный пользователем тип. Используя CassandraTemplate
из Spring Data Cassandra, я хочу обновить одно поле этого UDT. Это кажется невозможным.
Я пробовал это:
database.update(query(
where("party_id").is(partyId)).and(where("relationship_id").is(relationshipId)),
update("address.address_line_1", "this field was updated"),
Address.class);
Это вызывает:
Query error after 3 ms: UPDATE current_addresses_by_party SET "address.address_line_1"=? WHERE party_id=? AND relationship_id=?;com.datastax.driver.core.exceptions.InvalidQueryException: Undefined column name "address.address_line_1"
Выполнение CQL, указанного в выводе ошибки без кавычек, работает. Я не знаю, есть ли способ заставить Spring выполнить этот оператор, не заключая имя столбца в кавычки.
В припадке оптимизма я также попытался использовать синтаксис для типов карт:
database.update(query(
where("party_id").is(partyId)).and(where("relationship_id").is(relationshipId)),
Update.empty().set("address").atKey("address_line_1").to("this field was updated"),
Address.class)
Это привело к ожидаемой ошибке: поле не является картой.
Есть ли способ делать то, что я хочу, с CassandraTemplate
, не прибегая к прямому CQL? Если в CassandraTemplate
нет этой функции, было бы здорово, если бы разработчики добавили ее.
Я был удивлен, что не нашел никого, кто хотел бы это сделать. Может я что то совершенно не так делаю? Я новичок в Кассандре.