JDO + PostgreSQL Массивы - PullRequest
       6

JDO + PostgreSQL Массивы

1 голос
/ 12 сентября 2011

Я реализовал расширение store_mapping, но в настоящее время оно использует ObjectAsStringMapping. В результате я могу прочитать значения массива из базы данных, но любая вставка или обновление вызывает основную ошибку драйвера postgresql «INTEGER []» не является «VARCHAR».

Есть ли способ реализовать массивы PGSQL в JDO? Это выглядит довольно гибко со всеми этими точками расширения. Любые советы по точкам расширения, которые я должен реализовать, приветствуются, спасибо заранее!

Edit:

Я использую postgres int8 в качестве битового поля в качестве «замены» для массивов после того, как выяснил, что у меня все будет в порядке с 63 возможными значениями.

Примером класса будет:

@PersistenceCapable(detachable="true", table="campaigns")
public class Campaign  implements Serializable {

    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    public Long id;

    public List<Integer> regions;
}

И я думаю, что мне нужно реализовать какое-то отображение из List в java.sql.Array, но я до сих пор не понял, как это сделать. Я мог бы написать расширение и переопределить поведение по умолчанию, но какой это должна быть точка расширения?

1 Ответ

0 голосов
/ 22 марта 2013

Похоже, вам нужно создать собственную стратегию поля для обработки сопоставления.

В этом случае ключом является преобразование представления в этом случае в представление массива PostgreSQL, а именно значение, разделенное запятыми (с " экранированием текста с любыми специальными символами, но может использоваться со всеми значениями, двойные кавычки экранируются путем удвоения их ). Затем строка заключена в скобки между { и }. Так что ARRAY[1,2,3]::int[] становится '{1,2,3}' или '{"1","2","3"}'

...