-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 5 posts ] 
Author Message
 Post subject: Nicht das ganze Objekt laden?
PostPosted: Mon Mar 01, 2010 7:48 pm 
Newbie

Joined: Tue Aug 05, 2008 4:55 am
Posts: 5
Hallo,

wie schaff ich es am elegantesten nicht alles eines Objekts zu laden?

Ich habe z.B. Objekt a und in dem Objekt befinden sich ca. 50 Attribute und 5 Listen mit Objekten vom Typ b. Ich möchte beim Laden eines Objekts a, aber nicht die Listen vom Typ b laden.

Kann ich das über eine Annotation erschlagen oder muss ich mir in einem HQL-Statement ein "select new (..)" zusammenbasteln, was aber bei vielen Attributen nicht wirklich schön ist.

Hat jemand eine Idee? Ich bin für jeden Vorschlag dankbar, denn an diesem Problem probier ich schon seit Wochen rum und komm einfach nicht auf ne gute Lösung.

Viele Grüße

M-Tech
Sascha


Top
 Profile  
 
 Post subject: Re: Nicht das ganze Objekt laden?
PostPosted: Tue Mar 02, 2010 9:17 am 
Newbie

Joined: Fri Feb 26, 2010 9:09 am
Posts: 10
Wenn du Mappings statt Annotations verwenden würdest, könntest du ein neues Mapping mit weniger Attributen und einem anderen entity-name für die Klasse anlegen.
Dann kannst du mit diesem entity-name lesen und bekommst das Objekt, in dem nur die im Mapping definierten Attribute befüllt sind, zurück.


Alternativ könntest du eine Superklasse für dein Objekt anlegen, in dem zB die Listen nicht dabei sind.
In einer Subklasse hast du dann zusätzlich noch die Listen dabei.
Wenn du dann nur nach Objekten der Superklasse liest, bekommst du auch nur die darin definierten Attribute zurück.

Ich weiß aber nicht, ob das beim Lesen mit Annotations funktioniert (ich habe bis jetzt nur mit Mappings gearbeitet).


Top
 Profile  
 
 Post subject: Re: Nicht das ganze Objekt laden?
PostPosted: Wed Mar 03, 2010 10:54 am 
Expert
Expert

Joined: Thu Jan 08, 2009 6:16 am
Posts: 661
Location: Germany
OneToMany Assoziationen (wie deine A --* B) werden per default lazy geladen. Das bedeutet, hibernate selektiert eh nur dein Objekt A. Erst wenn du auf a.getBs() zugreifst, greift hibernate erneut auf die Datenbank zu (was zu einer LazyInitialisationException) führen kann, wenn deine Datenbanksession bereits geschlossen ist.

Willst du einzelne Attribute auch Lazy laden, musst du die @Basic Annotation verwenden. Davon wird allerdings abgeraten, durch einzelne weggelassene Spalten, lässt sich kaum ein Performanzgewinn erzielen.

Wie gesagt, Assozationen kannst du als Lazy (fetch-Attribut der Annotation ) definieren, was meist der beste Weg ist.

_________________
-----------------
Need advanced help? http://www.viada.eu


Top
 Profile  
 
 Post subject: Re: Nicht das ganze Objekt laden?
PostPosted: Mon Mar 08, 2010 11:43 am 
Newbie

Joined: Mon Jul 20, 2009 5:09 pm
Posts: 16
mmerder hat das gut beschrieben. Aber achte darauf, dass Du nichts final machst, wenn Du mit Lazy arbeitest.

Das hat mich schonmal echt viel Zeit gekostet. Javassist wird da wohl intern genutzt und das mag wohl final nicht so sehr...


Top
 Profile  
 
 Post subject: Re: Nicht das ganze Objekt laden?
PostPosted: Mon Sep 13, 2010 6:03 pm 
Newbie

Joined: Tue Aug 05, 2008 4:55 am
Posts: 5
Ist zwar schon etwas her, aber danke für eure Hilfe :).

Viele Grüße

M-Tech
Sascha


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 5 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.