Хранение многомерных массивов с помощью Morphia

У меня проблемы с чтением/распаковкой многомерных массивов с помощью Morphia.

Следующий класс:

@Entity
class A {

  double[][] matrix;
}

правильно сортируется и хранится в mongodb, но при чтении я получаю исключение, что двойное [][] не может быть построено. Я пытался использовать пользовательский TypeConverter, но он не вызывается для таких типов. Подобные проблемы я получаю при использовании такого члена:

List<double[]> matrix;

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

Заранее спасибо.


person tod    schedule 29.11.2011    source источник
comment
В итоге я перешел на Spring-data-mongodb, что позволило мне настроить сортировку списков.   -  person tod    schedule 06.01.2012


Ответы (1)


Я еще не использовал многомерные массивы с Morphia, поэтому ничего не могу сказать об этом. Однако я сделал следующее для неподдерживаемых типов данных (например, BigDecimal):

  • Определите неподдерживаемый тип данных как переходный
  • Определите поддерживаемый тип данных для хранения вашей информации
  • Сериализуйте/десериализуйте его в поддерживаемый тип данных через @PrePersist и @PostLoad.

Мой код выглядит примерно так:

@Transient
private BigDecimal salary;
private String salaryString;

@PrePersist
public void prePersist(){
  if(salary != null){
    this.salary = this.salary.setScale(2, BigDecimal.ROUND_HALF_UP);
    salaryString = this.salary.toString();
  }
}

@PostLoad
public void postLoad(){
  if(salary != null){
    this.salary = this.salary.setScale(2, BigDecimal.ROUND_HALF_UP);
    this.salary = new BigDecimal(salaryString);
  }
}
person xeraa    schedule 29.11.2011
comment
Это обходной путь, но не то, что я ищу. Требуемая дополнительная обработка неэффективна для больших коллекций. - person tod; 02.12.2011