powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Re: JBoss + Spring + JPA + Hibernate хранение документов в PostgreSQL
21 сообщений из 21, страница 1 из 1
Re: JBoss + Spring + JPA + Hibernate хранение документов в PostgreSQL
    #38922629
FlyHippo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хотел попробовать хранить не формализованные документы в базе в поле bytea, сохранил для пробы картинку в базу
В сущности написал:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
    @Lob
    @Column(name = "datab")
    private byte[] datab = new byte[0];
    public byte[] getDatab() {
        return datab;
    }
    public void setDatab(byte[] datab) {
        this.datab = datab;
    }


При выполнении Rest запроса выходит ошибка:
Caused by: org.postgresql.util.PSQLException: Bad value for type long : \xffd8ffe11ffe4578696600004d4d002a00000080006011200030000000100010000011a00050000000100000056011b0005000000010000005e
.........................................................................................................................................................................................
2800a28a2800a28a2800a28a2800a28a2800a28a2803ffd9
at org.postgresql.jdbc2.AbstractJdbc2ResultSet.toLong(AbstractJdbc2ResultSet.java:2992)
at org.postgresql.jdbc2.AbstractJdbc2ResultSet.getLong(AbstractJdbc2ResultSet.java:2164)
at org.postgresql.jdbc2.AbstractJdbc2ResultSet.getBlob(AbstractJdbc2ResultSet.java:379)
at org.postgresql.jdbc2.AbstractJdbc2ResultSet.getBlob(AbstractJdbc2ResultSet.java:367)
at org.jboss.jca.adapters.jdbc.WrappedResultSet.getBlob(WrappedResultSet.java:573)
at org.hibernate.type.descriptor.sql.BlobTypeDescriptor$1.doExtract(BlobTypeDescriptor.java:65) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
at org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:64) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:267) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:263) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:253) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
at org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:338) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2969) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1696) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1628) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
at org.hibernate.loader.Loader.getRow(Loader.java:1515) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:726) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
at org.hibernate.loader.Loader.processResultSet(Loader.java:953) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
at org.hibernate.loader.Loader.doQuery(Loader.java:921) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:355) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
at org.hibernate.loader.Loader.doList(Loader.java:2554) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
... 90 more



Как правильно описать сущность?
...
Рейтинг: 0 / 0
Re: JBoss + Spring + JPA + Hibernate хранение документов в PostgreSQL
    #38922646
FlyHippo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще пробовал так:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    @Lob
    @Type(type = "org.hibernate.type.BlobType")
    @Column(name = "datab ")
    private byte[] datab = new byte[0];
    public byte[] getDatab() {
        return datab;
    }
    public void setDatab(byte[] datab) {
        this.datab = datab;
    }



и так:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    @Lob
    @Basic(fetch= FetchType.LAZY)
    @Column(name = "datab ", columnDefinition = "BLOB")
    private byte[] datab = new byte[0];
    public byte[] getDatab() {
        return datab;
    }
    public void setDatab(byte[] datab) {
        this.datab = datab;
    }



ошибка та же ...
...
Рейтинг: 0 / 0
Re: JBoss + Spring + JPA + Hibernate хранение документов в PostgreSQL
    #38922684
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У вас в работе с Postgres косяк, а не в JBoss + Spring + JPA + Hibernate
http://stackoverflow.com/questions/2069541/postgresql-jdbc-and-streaming-blobs
...
Рейтинг: 0 / 0
Re: JBoss + Spring + JPA + Hibernate хранение документов в PostgreSQL
    #38922721
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AFAIK Дык hibernate и должен скрывать "работу с Postgres"
IMHO Странно это
...
Рейтинг: 0 / 0
Re: JBoss + Spring + JPA + Hibernate хранение документов в PostgreSQL
    #38922741
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevAFAIK Дык hibernate и должен скрывать "работу с Postgres"
Точно так же как и JDBC. А по факту оказывается что bytea это такой особый тип. Или в драйвере косяк.
...
Рейтинг: 0 / 0
Re: JBoss + Spring + JPA + Hibernate хранение документов в PostgreSQL
    #38922746
FlyHippo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczУ вас в работе с Postgres косяк, а не в JBoss + Spring + JPA + Hibernate
http://stackoverflow.com/questions/2069541/postgresql-jdbc-and-streaming-blobs
https://www.microolap.com/products/connectivity/postgresdac/help/tipsandtricks_byteavsoid.htm
в том то и дело что документы то небольшие планируются
при использовании типа OID сохраняется только ссылка, а данные хранятся в pg_largeobject system table.
...
Рейтинг: 0 / 0
Re: JBoss + Spring + JPA + Hibernate хранение документов в PostgreSQL
    #38922751
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Caused by: org.postgresql.util.PSQLException: Bad value for type long : \xffd8ffe11ffe4578696600004d4d002a00000080006011200030000000100010000011a00050000000100000056011b0005000000010000005e
.........................................................................................................................................................................................
2800a28a2800a28a2800a28a2800a28a2800a28a2803ffd9
at org.postgresql.jdbc2.AbstractJdbc2ResultSet.toLong(AbstractJdbc2ResultSet.java:2992)

Идем и смотрим сорцы http://www.postgresql.org/message-id/attachment/14539/AbstractJdbc2ResultSet.java

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
    public static long toLong(String s) throws SQLException
    {
        if (s != null)
        {
            try
            {
                s = s.trim();
                return Long.parseLong(s);
            }
            catch (NumberFormatException e)
            {
                try
                {
                    BigDecimal n = new BigDecimal(s);
                    BigInteger i = n.toBigInteger();
                    int gt = i.compareTo(LONGMAX);
                    int lt = i.compareTo(LONGMIN);

                    if ( gt > 0 || lt < 0 )
                    {
                        throw new PSQLException(GT.tr("Bad value for type {0} : {1}", new Object[]{"long",s}),
                                                PSQLState.NUMERIC_VALUE_OUT_OF_RANGE);
                    }
                    return i.longValue();
                }
                catch ( NumberFormatException ne )
                {
                    throw new PSQLException(GT.tr("Bad value for type {0} : {1}", new Object[]{"long",s}),
                                            PSQLState.NUMERIC_VALUE_OUT_OF_RANGE);
                }
            }
        }
        return 0;  // SQL NULL
    }



Видим, что к BLOB'ам данный метод (как и явствует из названия и текста ошибки) НИКАКОГО отношения не имеет. Почему-то Hibernate считает что у данной колонки тип long.

Вроде, в приведенных анотациях, тип поля LOB, а не long. Поскольку кусок кода и проект не полный, откуда взялся long можно только гадать на хрустальном шаре.

IMHO
...
Рейтинг: 0 / 0
Re: JBoss + Spring + JPA + Hibernate хранение документов в PostgreSQL
    #38922753
FlyHippo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid KudryavtsevAFAIK Дык hibernate и должен скрывать "работу с Postgres"
IMHO Странно это
Использую JPA Repository и он по идее должен упрощать работу с такими полями как bytea до нельзя ...
...
Рейтинг: 0 / 0
Re: JBoss + Spring + JPA + Hibernate хранение документов в PostgreSQL
    #38922756
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczТочно так же как и JDBC. А по факту оказывается что bytea это такой особый тип. Или в драйвере косяк.
Подозреваю, косяк у автора топика. Где, когда и в чем, отсюда не видно.
...
Рейтинг: 0 / 0
Re: JBoss + Spring + JPA + Hibernate хранение документов в PostgreSQL
    #38922758
FlyHippo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Аннотация для hibernate так же не помогает

@Type(type = "org.hibernate.type.BlobType")
...
Рейтинг: 0 / 0
Re: JBoss + Spring + JPA + Hibernate хранение документов в PostgreSQL
    #38922762
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Х.з. Может проект не корректно собирается. Какие-то старые файлы остались. И так далее....

Если вдруг увидел люк, не волнуйся, это глюк ( C ) народная мудрость

IMHO
...
Рейтинг: 0 / 0
Re: JBoss + Spring + JPA + Hibernate хранение документов в PostgreSQL
    #38922785
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С другой стороны:
FlyHippoat org.postgresql.jdbc2.AbstractJdbc2ResultSet. getBlob (AbstractJdbc2ResultSet.java:379)

Х.з. Странно. Разбираться нужно.
...
Рейтинг: 0 / 0
Re: JBoss + Spring + JPA + Hibernate хранение документов в PostgreSQL
    #38922820
FlyHippo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid KudryavtsevХ.з. Может проект не корректно собирается. Какие-то старые файлы остались. И так далее....
IMHO

Спецом свежий проект накидал ...
Ща еще новый объект с нуля сделаю, чтобы только поле bytea было и id.
...
Рейтинг: 0 / 0
Re: JBoss + Spring + JPA + Hibernate хранение документов в PostgreSQL
    #38922823
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczУ вас в работе с Postgres косяк, а не в JBoss + Spring + JPA + Hibernate
http://stackoverflow.com/questions/2069541/postgresql-jdbc-and-streaming-blobs
Ты прав. Декомпилированный код postgresql-9.3-1102.jdbc41.jar


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
  public Blob getBlob(int i)
    throws SQLException
  {
    checkResultSet(i);
    if (this.wasNullFlag) {
      return null;
    }
    return makeBlob( getLong (i));
  }


IMHO Авторы PostgreSQL JDBC драйвера уроды и дебилы. Получается, что только тип OID ((( Но это какой-то бред.

В нормальных БД (Oracle), BLOB он и есть BLOB. И пофиг, как он на сервере хранится. Это дело сервера.
...
Рейтинг: 0 / 0
Re: JBoss + Spring + JPA + Hibernate хранение документов в PostgreSQL
    #38922824
FlyHippo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid KudryavtsevС другой стороны:
FlyHippoat org.postgresql.jdbc2.AbstractJdbc2ResultSet. getBlob (AbstractJdbc2ResultSet.java:379)

Х.з. Странно. Разбираться нужно.

postgresql-9.3-1102.jdbc41.jar версия драйвера, а тут почему то на jdbc2 указывается ....
...
Рейтинг: 0 / 0
Re: JBoss + Spring + JPA + Hibernate хранение документов в PostgreSQL
    #38922872
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смотришь в сорцы и понимаешь, какая б.... помойка. По сравнению с коммерческими СУБД.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
  public InputStream getBinaryStream(int columnIndex)
    throws SQLException
  {
    checkResultSet(columnIndex);
    if (this.wasNullFlag) {
      return null;
    }
    if (this.connection.haveMinimumCompatibleVersion("7.2"))
    {
 
      byte[] b = getBytes(columnIndex);
      if (b != null) {
        return new ByteArrayInputStream(b);
      }
 
    }
    else if (this.fields[(columnIndex - 1)].getOID() == 26)
    {
      LargeObjectManager lom = this.connection.getLargeObjectAPI();
      LargeObject lob = lom.open(getLong(columnIndex));
      return lob.getInputStream();
    }
    return null;
  }

Целиком на клиента вычитывает (((
а если у меня там гигабайты? Вроде же, имею право (((
...
Рейтинг: 0 / 0
Re: JBoss + Spring + JPA + Hibernate хранение документов в PostgreSQL
    #38922903
FlyHippo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FlyHippoLeonid KudryavtsevХ.з. Может проект не корректно собирается. Какие-то старые файлы остались. И так далее....
IMHO

Спецом свежий проект накидал ...
Ща еще новый объект с нуля сделаю, чтобы только поле bytea было и id.

Без @Lob заработало нормально, сервис вернул последовательность байт, но не то что лежит в базе
...
Рейтинг: 0 / 0
Re: JBoss + Spring + JPA + Hibernate хранение документов в PostgreSQL
    #38922918
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FlyHippoИспользую JPA
https://virgo47.wordpress.com/2008/06/13/jpa-postgresql-and-bytea-vs-oid-type/
JPA, PostgreSQL and bytea vs. oid type

IMHO

Не доработка в JDBC драйверах. Брать напильник и б...ь дописывать. Вроде всего одного if и простейшего класса (строк на 200-300 максимум) не хватает.

Было бы мне нужно, может и допилил бы. Но у нас проект с PostgreSQL (под сотню гигов блоб'ов) пока застрял на мертвой точке.

Ну и сорцы JDBC драйвера производят впечатление помойки (((
...
Рейтинг: 0 / 0
Re: JBoss + Spring + JPA + Hibernate хранение документов в PostgreSQL
    #38923118
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevПочему-то Hibernate считает что у данной колонки тип long.
Нет не считает. Смотрите стэктрейс внимательнее.
...
Рейтинг: 0 / 0
Re: JBoss + Spring + JPA + Hibernate хранение документов в PostgreSQL
    #38923873
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Данная "фича", даже на сайте зарегистрирована. И... как я понимаю... с 2005 года воз и ныне там (((

https://jdbc.postgresql.org/development/todo.html#Ideas

[] Allow Blob/Clob to operate on bytea/text data. ref →
...
Рейтинг: 0 / 0
Re: JBoss + Spring + JPA + Hibernate хранение документов в PostgreSQL
    #38924181
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обновлю за автора топика. Пока на данный момент IMHO:

1. Читать документацию PostgreSQL.

PostgreSQL тип bytea != Oracle типу BLOB ! Он, скорее, равен Oracle типу RAW (только лимит 1 Gb вместо 4000 байт)

2. Полноценные BLOB'ы в PostgreSQL делаются через одно место, откуда обычно растут ноги. Читать раздел доки

PostgreSQL 9.4.0 Documentation
IV. Client Interfaces
Chapter 32. Large Objects

3. Соответственно, более корректное объявления типа bytea в хибернейте это

@Type(type = "org.hibernate.type.BinaryType")

возможно нужно как-то по другому, но вроде такое съело.

p.s. Как вчера посмотрел поближе на код, документацию, сайт проекта.... понял, что нужно срочно нажраться. Т.к. "вера в человечество" ( C ) Остап-Сулейман-Берта-Мария-Бендер-бей потеряна окончательно (((
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Re: JBoss + Spring + JPA + Hibernate хранение документов в PostgreSQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]