# Hibernate @BatchSize



## Pacal (2. Dez 2009)

Hallo,

ich versuche mit der Hibernate-Annotation @BatchSize ein Paging beim Auslesen aus meiner MySQL-Datenbank aufzubauen. Dazu habe ich eine Klasse A die eine OneToMany Referenz auf B hat. B hat ein Attribut description:
[Java]
@Entity
public class A
{
   @Id
   protected String id;

   @OneToMany( cascade = CascadeType.ALL, fetch = FetchType.LAZY )
   @BatchSize( size = 10 )
   protected List<B> bList;
}

@Entity
public class A
{
    @Id
    protected String id;

    protected String description;
}
[/Java] 

Innerhalb einer laufenden Session lese ich später die B's aus A aus:
[Java]
List<A> dbA = session.createQuery( "from A a where a.id like ?" ).setString( 0, 1 ).list();
for( B b : dbA.getBList() )
{
     if( null != b.getId() && null != b.getDescription() )
     {
           System.out.println( b.getDescription() );
     }
}
[/Java]

Jetzt gibt mit das Programm aber nicht nur für die ersten 10 B's die Description sondern für alle aus. Dabei dachte ich dass für alle Objekte, die nach dem Batch-Size-Index von 10 kommen, alle Werte später nachgeladen werden und jetzt noch gar nicht bekannt sind.

Wo kann mein Fehler liegen, wo könnte ich mehr über BatchSize nachlesen?

Grüße
Pacal


----------



## maki (2. Dez 2009)

@BatchSize hat rein gar nix mit Paging zu tun sondern mit lazy/eager Initialisierung 

Vielleciht hilft dir ja das hier: Hibernate - Tuning Queries Using Paging, Batch Size, and Fetch Joins | Javalobby


----------



## Pacal (3. Dez 2009)

Vielen Dank maki,
das war ja dann doch nicht so schwer wie ich dachte.


----------

