К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

Spring data: я что-то не понимаю, или он ужасен?

Гость
0 - 21.04.2017 - 18:16
Развлекаюсь со spring data.
В частности, мне нужно сохранить в mongodb объект, который содержит в себе изображение в формате BufferedImage. Но он этого не может сделать потому, что:
org.springframework.data.mapping.model.MappingExce ption: Ambiguous field mapping detected! Both private int sun.awt.image.ByteComponentRaster.maxX and private int sun.awt.image.ByteInterleavedRaster.maxX map to the same field name maxX! Disambiguate using @Field annotation!

Вроде, очевидно. Пометьте спорные моменты словом @Field - и все, конфликт разрешен. Но как я это сделаю внутри класса, который писал не я?

Окей, может есть альтернативный способ? Можно же написать геттер, который приведет содержимое этой картинки в какой угодно вид. Но нет - спринг дата работает только с полями. Рефлекшн, мать его.

Кстати, в тему рефлекшна. Мне кажется, что это - грязный хак и кроме как для тестирования и отладки его использовать не следует. Плюс, везде пишут, что это медленно. А тут он и в хвост и в гриву.

Самое противное, мне это не очень нужно. Картинки должны храниться в другом хранилище, монго - исключительно для универсальности и поддержки старого кода.

В качестве решения пока-что вижу создание класса-обертки, который перед сохранением вынет данные. Может, есть решение получше?



Гость
1 - 21.04.2017 - 18:19
кстати, в hibernate можно использовать геттеры. Почему в спринг дате не так?
Гость
2 - 22.04.2017 - 18:17
BufferedImage - представление битмапа в памяти, хранить надо конкретный формат, который очевидно представлен в виде массива байт
Гость
3 - 22.04.2017 - 22:40
почему конкретный формат? Банально - серилизовать класс. Если мне все равно, в каком формате хранить (главное, чтобы восстановился в таком же)?
Гость
4 - 24.04.2017 - 01:38
>Банально - серилизовать класс.

1) это не банально,

2) сериализовать в java , это также преобразовать в поток байт, и то если объект реализует интерфейс Serializable

3) преобразовывать класс изображения в байты - занятие, по меньшей мере странное, т.к. она займет в памяти W*H*3 байт (для 8битного RGB) это например 6 мегабайт для скриншота (1920*1080*3), 1000 таких картинок - оппа и у тебя гигабайтная табличка субд. В то время как в png скриншот сего форума занимает например 200кб, что в 30 раз меньше
Гость
5 - 24.04.2017 - 06:53
ок, тогда как мне сохранить класс, содержащий BufferedImage? В случае с hibernate я просто создал бы геттер, который, например, генерит ту же png и повесил бы на него аннотацию @Column?
Гость
6 - 24.04.2017 - 12:40
> В случае с hibernate я просто создал бы геттер, который, например, генерит ту же png и повесил бы на него аннотацию @Column?

http://docs.spring.io/spring-data/da...g-chapter.html

>6.3.6 Overriding Mapping with explicit Converters

?
Гость
7 - 25.04.2017 - 06:53
Цитата:
Сообщение от Добрых дел мастер Посмотреть сообщение
занятие, по меньшей мере странное, т.к. она займет в памяти W*H*3 байт (для 8битного RGB) это например 6 мегабайт для скриншота
давным давно мудрые дяди разработали сжатие картинок. вот пример с классическим изображением Lena
263 222 lena512.bmp
16 301 lena512.JPG
11 576 lena51220.JPG
на глаз не отличишь.
Гость
8 - 25.04.2017 - 10:33
2wayerr. Читал я про конвертеры, мне не понравилось, что описание по сути таблицы в БД находится в двух разных местах.
2x0577216. А как насчет потерь при сжатии? Формат BufferedImage не просто так придуман. Он подразумевает работу с изображением.
Хотя, есть форматы со сжатием без потерь.
Гость
9 - 25.04.2017 - 16:21
8-Добрых дел мастер > что описание по сути таблицы в БД находится в двух разных местах.

какое отношение "конвертер объекта класса в байты" имеет к "таблиц бд"?
Гость
10 - 26.04.2017 - 14:08
Цитата:
Сообщение от Добрых дел мастер Посмотреть сообщение
А как насчет потерь при сжатии?
1 Никак. Эта Лена 256*256 используется как образец при проверке всяческих методов обработки. При сжатии до 30% и 20% человеческий глаз их не различает.
2 Общеизвестные СУБД имеют поля данных типа BLOB =
Википедия: В СУБД BLOB — специальный тип данных, предназначенный, в первую очередь, для хранения изображений, а также компилированного программного кода.
Гость
11 - 29.04.2017 - 20:31
10-x0577216 > Брехня! Переменные не могут быть в куче, а объекты на стеке. Это я про мнение автора в другой теме. :)


К списку вопросов






Copyright ©, Все права защищены