Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Re: JBoss + Spring + JPA + Hibernate хранение документов в PostgreSQL / 21 сообщений из 21, страница 1 из 1
31.03.2015, 15:12
    #38922629
FlyHippo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Re: JBoss + Spring + JPA + Hibernate хранение документов в PostgreSQL
Хотел попробовать хранить не формализованные документы в базе в поле 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
31.03.2015, 15:19
    #38922646
FlyHippo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Re: JBoss + Spring + JPA + Hibernate хранение документов в PostgreSQL
Еще пробовал так:

Код: 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
31.03.2015, 15:30
    #38922684
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Re: JBoss + Spring + JPA + Hibernate хранение документов в PostgreSQL
У вас в работе с Postgres косяк, а не в JBoss + Spring + JPA + Hibernate
http://stackoverflow.com/questions/2069541/postgresql-jdbc-and-streaming-blobs
...
Рейтинг: 0 / 0
31.03.2015, 15:43
    #38922721
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Re: JBoss + Spring + JPA + Hibernate хранение документов в PostgreSQL
AFAIK Дык hibernate и должен скрывать "работу с Postgres"
IMHO Странно это
...
Рейтинг: 0 / 0
31.03.2015, 15:51
    #38922741
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Re: JBoss + Spring + JPA + Hibernate хранение документов в PostgreSQL
Leonid KudryavtsevAFAIK Дык hibernate и должен скрывать "работу с Postgres"
Точно так же как и JDBC. А по факту оказывается что bytea это такой особый тип. Или в драйвере косяк.
...
Рейтинг: 0 / 0
31.03.2015, 15:54
    #38922746
FlyHippo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Re: JBoss + Spring + JPA + Hibernate хранение документов в PostgreSQL
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
31.03.2015, 15:55
    #38922751
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Re: JBoss + Spring + JPA + Hibernate хранение документов в PostgreSQL
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
31.03.2015, 15:55
    #38922753
FlyHippo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Re: JBoss + Spring + JPA + Hibernate хранение документов в PostgreSQL
Leonid KudryavtsevAFAIK Дык hibernate и должен скрывать "работу с Postgres"
IMHO Странно это
Использую JPA Repository и он по идее должен упрощать работу с такими полями как bytea до нельзя ...
...
Рейтинг: 0 / 0
31.03.2015, 15:56
    #38922756
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Re: JBoss + Spring + JPA + Hibernate хранение документов в PostgreSQL
BlazkowiczТочно так же как и JDBC. А по факту оказывается что bytea это такой особый тип. Или в драйвере косяк.
Подозреваю, косяк у автора топика. Где, когда и в чем, отсюда не видно.
...
Рейтинг: 0 / 0
31.03.2015, 15:58
    #38922758
FlyHippo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Re: JBoss + Spring + JPA + Hibernate хранение документов в PostgreSQL
Аннотация для hibernate так же не помогает

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

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

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

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

Спецом свежий проект накидал ...
Ща еще новый объект с нуля сделаю, чтобы только поле bytea было и id.
...
Рейтинг: 0 / 0
31.03.2015, 16:22
    #38922823
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Re: JBoss + Spring + JPA + Hibernate хранение документов в PostgreSQL
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
31.03.2015, 16:23
    #38922824
FlyHippo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Re: JBoss + Spring + JPA + Hibernate хранение документов в PostgreSQL
Leonid KudryavtsevС другой стороны:
FlyHippoat org.postgresql.jdbc2.AbstractJdbc2ResultSet. getBlob (AbstractJdbc2ResultSet.java:379)

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

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

Код: 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
31.03.2015, 16:51
    #38922903
FlyHippo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Re: JBoss + Spring + JPA + Hibernate хранение документов в PostgreSQL
FlyHippoLeonid KudryavtsevХ.з. Может проект не корректно собирается. Какие-то старые файлы остались. И так далее....
IMHO

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

Без @Lob заработало нормально, сервис вернул последовательность байт, но не то что лежит в базе
...
Рейтинг: 0 / 0
31.03.2015, 16:59
    #38922918
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Re: JBoss + Spring + JPA + Hibernate хранение документов в PostgreSQL
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
31.03.2015, 19:49
    #38923118
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Re: JBoss + Spring + JPA + Hibernate хранение документов в PostgreSQL
Leonid KudryavtsevПочему-то Hibernate считает что у данной колонки тип long.
Нет не считает. Смотрите стэктрейс внимательнее.
...
Рейтинг: 0 / 0
01.04.2015, 14:37
    #38923873
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Re: JBoss + Spring + JPA + Hibernate хранение документов в PostgreSQL
Данная "фича", даже на сайте зарегистрирована. И... как я понимаю... с 2005 года воз и ныне там (((

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

[] Allow Blob/Clob to operate on bytea/text data. ref →
...
Рейтинг: 0 / 0
01.04.2015, 18:42
    #38924181
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Re: JBoss + Spring + JPA + Hibernate хранение документов в PostgreSQL
Обновлю за автора топика. Пока на данный момент 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
Форумы / Java [игнор отключен] [закрыт для гостей] / Re: JBoss + Spring + JPA + Hibernate хранение документов в PostgreSQL / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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