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
| Цитата:
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 > Брехня! Переменные не могут быть в куче, а объекты на стеке. Это я про мнение автора в другой теме. :) | |
| Интернет-форум Краснодарского края и Краснодара |