powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate java.sql.Blob/java.sql.Clob lazy, хочу ясности понимания...
2 сообщений из 2, страница 1 из 1
Hibernate java.sql.Blob/java.sql.Clob lazy, хочу ясности понимания...
    #39384595
justcoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет, вопрос собственно вот в чем.Создал тестовую сущность.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
@Entity
public class Book {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Lob
    private String contentStr;

    @Lob
    private byte[] imageByte;

    @Lob
    @Basic(fetch = FetchType.LAZY)
    private Blob imageBlob;

    @Lob
    private Clob contentClob;
   
    //getters setters
}



Открываю пару источников, там написано
Код: html
1.
2.
3.
Alternatively, you can switch the type of property in your Java class. JDBC supports locator objects (LOBs) directly.
 If your Java property is java.sql.Clob or 
java.sql.Blob, you get lazy loading without bytecode instrumentation



Другой источник
Код: html
1.
2.
3.
4.
5.
6.
java.sql.Blob and java.sql.Clob are the most efficient way to handle large objects in Java. Unfortunately, an instance of Blob or Clob
 is only useable until the JDBC transaction completes. So if your persistent class defines a property of java.sql.Clob or
 java.sql.Blob (not a good idea anyway), 
you’ll be restricted in how instances of the class may be used. In particular,
 you won’t be able to use instances of that class as detached objects. 
Furthermore, many JDBC drivers don’t feature working support for java.sql.Blob and java.sql.Clob.



Собственно, на то чтобы атрибуты

Код: java
1.
2.
3.
4.
5.
 @Lob
    private String contentStr;

    @Lob
    private byte[] imageByte;



были ленивыми я не расчитываю, потому что нужно применить bytecode instrumentation.

А вот с Blob и Clob хотелось бы получить lazy. Итак, запускаю

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
       EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();
        em.persist(createBook(em));
        em.getTransaction().commit();
        em.close();


        em = emf.createEntityManager();
        Book book = em.find(Book.class,1L);
        em.close();



И вижу, что генерируется запрос

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select
        book0_.id as id1_0_0_,
        book0_.contentClob as contentClob2_0_0_,
        book0_.contentStr as contentStr3_0_0_,
        book0_.imageBlob as imageBlob4_0_0_,
        book0_.imageByte as imageByte5_0_0_ 
    from
        Book book0_ 
    where
        book0_.id=?


Собственно, никакой ленивой загрузки нет.

Свойства в перситенс.xml

Код: html
1.
2.
javax.persistence.jdbc.driver=oracle.jdbc.driver.OracleDriver
hibernate.dialect=org.hibernate.dialect.Oracle10gDialect



Я правильно понял (судя из many JDBC drivers don’t feature working support for java.sql.Blob and java.sql.Clob.), что , наверное этот драйвер не позволяет сделать это? Поясните пожалуйста.
...
Рейтинг: 0 / 0
Hibernate java.sql.Blob/java.sql.Clob lazy, хочу ясности понимания...
    #39384784
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alternatively, you can switch the type of property in your Java class. JDBC supports locator objects (LOBs) directly. If your Java property is java.sql.Clob or java.sql.Blob, you get lazy loading without bytecode instrumentation


justcoderИ вижу, что генерируется запрос....

Учите английский и мат.часть. ДАННЫЕ блоба, скорее всего *) , передаваться НЕ будут, т.к. нормальные базы данных (Oracle) вместо данных будут передавать LOB LOCATOR, т.е. ссылку на данне. А сами данные, передаются только тогда, когда Вы их запросите.

Т.ч. специальнй lazy loading не нужен.

P.S.
*) Скорее всего - т.к. зависит от типа БД и настройки клиента. Из-за необходимости отдельно запрашивать данные, увеличивается количество обращений по сети. Т.ч. например Oracle последних версий в некоторых режимах prefetch / array fetc с целью оптимизациции для небольших LOB'ов сразу же передает данные.

AFAIK
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate java.sql.Blob/java.sql.Clob lazy, хочу ясности понимания...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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