Spring data Cassandra преобразует имя пространства ключей и имена таблиц в нижний регистр

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

Также немного полезно использовать:

myObject.Property1 = "Test String";
Console.WriteLine(myObject.Property1);

Чем вы видите на некоторых других языках:

myObject.setProperty1("Test String");
System.out.writeln(myObject.getProperty1());

Вот пример, в котором вы можете инкапсулировать некоторую логику:

public int Order
{
    get { return m_order; }
    set
    {
        // Put some rules checking here. Maybe a call to make sure that the order isn't duplicated or some other error based on your business rules.
        m_order = value;
    }
}

Другим способом, который они полезны, было бы так:

public int Order { get; private set; }

И теперь у вас есть получил свойство с автоматическим внедрением с переменной-членом backing, которую можно установить только внутри класса, но читать везде.

Наконец, если вам нужно управлять логикой, вы можете написать это:

public int Order
{
    get { return m_order; }
    protected set
    {
        // Again, you can do some checking here if you want...
        m_order = value;
        // You can also do other updates if necessary. Perhaps a database update...
    }
}
1
задан MAhmed 18 January 2019 в 14:06
поделиться

2 ответа

Мне удалось решить проблему, добавив (forceQuote = true) к аннотации @Table.

@Table(value = "MyTable", forceQuote = true)
public class MyTable {

}
0
ответ дан MAhmed 18 January 2019 в 14:06
поделиться

В CQLandra CQL идентификаторы, такие как пространство ключей, имена таблиц и столбцов, не чувствительны к регистру. Если вы хотите использовать смешанный регистр, вы должны указать свои имена, т.е. :

import org.springframework.data.cassandra.core.mapping.Table;

@Table("\"MyTable\"")
public class MyTable {

}

При этом я настоятельно рекомендую не использовать идентификаторы смешанного регистра. Хотя это работает, это создает большую сложность в том, чтобы беспокоиться о цитировании всего. Соглашение, которое я чаще всего вижу с Cassandra, заключается в использовании всего строчного использования _ в качестве разделителя слов, то есть my_table. Вы все еще можете использовать MyTable в качестве имени класса для соответствия соглашениям Java.

0
ответ дан Andy Tolbert 18 January 2019 в 14:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: