Я экспериментирую с кальцитом из scala и пытаюсь передать простой класс scala для создания схемы во время выполнения (используя ReflectiveSchema
), у меня немного болит голова.
Например, повторно реализуя Пример JDBC FoodMart (который хорошо работает в Java), я называю его простым, как new ReflectiveSchema(new Hr())
, используя класс Hr
, переписанный в scala следующим образом:
class HR {
val emps: Array[Employee] = Array(new Employee(100, "Bill"))
}
У меня ошибка: ...SqlValidatorException: Object 'emps' not found within 'hr'
. Эта проблема, по-видимому, связана с тем фактом, что val
поля на самом деле создаются private
в байт-коде из Java, и реализация в кальците, кажется, может использовать (посредством отражения Java) только поля, доступные через .getFields()
метод класса.
Поэтому я полагаю, что это направление требует гораздо большего взлома, чем простой my_field.setAccessible(true)
или аналогичный.
Есть ли другой способ построения схемы с помощью API, избегая отражения и использования JSON?
заранее спасибо за любые предложения