Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

Using JPA to partially initialize entities

Posted on 2011-02-17
7
Medium Priority
?
1,598 Views
Last Modified: 2013-11-24
Hi,

I have created an application with a relatively complex model. Everything was working fine and the beta-tests were running smoothly. The problem I am having is that I am using BlazeDS to send results to a Flex client. This causes all relations to be loaded (even if they are marked for lazy loading) and sent to the client. This is rather undesirable as a simple listEntityA doesn't only return a list of EntityA but also all of their references and the references of their references ... a lot of stuff.

I know in JPA I can do these really cool "SELECT NEW packagename.Classname(params...) FROM ..." to create unmanaged instances that are partially initialized (projections). The problem is, that I really would like the main entity to be fully initialized, but I would love some related objects to be only initialized with let's say "id" and "name" (all other properties left empty) ... this would be a projection of the relation.

How could I do this?
0
Comment
Question by:ChristoferDutz
7 Comments
 
LVL 47

Expert Comment

by:for_yan
ID: 34915055
Would not claim that I understand much of what you are writing about, but this is the link with quite similar words,
who knows, maybe you haven't seen it:

http://ria.dzone.com/articles/lazy-loading-flex-blazeds-hibernate
0
 
LVL 20

Author Comment

by:ChristoferDutz
ID: 34915254
I just added the Flex, BlazeDS, LazyCollections words in order to set the focus. My system works great without any errors. I am currently optimizing. Let me explain my problem in a little more detail

I have the following entities with the properties:

EntityA
- id
- name
- oneToMany to EntityB
- oneToMany to EntityC

EntityB
- id
- name
- oneToOne to EntityD

EntityC
- id
- name
- (big blob of data)

EntityD
- id
- name
- (big blob of data)

Open in new window


Now immagine I want to load a list of EntityA objects. When displaying one of the EntityA Objects in a list, I want to output the name of all EntityBs that are associated with that entity and output a link behind the name to switch to that entities view (I only need the id and name and not all the other properties).

So I am looking for a way to do the projection select on the related objects and not the main entity.
0
 
LVL 1

Expert Comment

by:zabin7
ID: 34925099
What I understood is u want to load only the parent record but not the child record. If that is the case then you can use lazy loading

@OneToMany(mappedBy = "type", fetch = FetchType.LAZY)
    private List<Type> type= new ArrayList<Type>();
0
What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

 
LVL 20

Author Comment

by:ChristoferDutz
ID: 34925118
No ... I want to load the parent and I want to partially load the children.
I can load an entity partially by using projection in my select-statement "SELECT NEW de.cware.cweb.model.User(usr.id, usr.name) FROM User usr"
What I would like to do, ist to load the parrent fully and the related entities partially in a way that in the related objects only the id and name properties are initialized.


0
 
LVL 5

Accepted Solution

by:
aciuica earned 2000 total points
ID: 34928956
Maybe it depends of which JPA implementation you use (if supports fields lazy loading), but annotating some fields from related entities with lazy loading can be a soution.
http://www.java2s.com/Tutorial/Java/0355__JPA/MarkFieldAsLazyLoad.htm
0
 
LVL 20

Author Comment

by:ChristoferDutz
ID: 34954489
I'm currently stuck with an ANTLR problem ... I'l check this lazy loaded property thing you mentioned ... sounds very prommissing :-)
0
 
LVL 20

Author Closing Comment

by:ChristoferDutz
ID: 34996366
Thanks for the tip with the lazy-loaded properties.

I actually solved my problem by going from JPA to Jdbc directly as here I could controll exactly what I wanted to do.

Thanks anyway.
0

Featured Post

Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In this blog post, we’ll look at how using thread_statistics can cause high memory usage.
How much do you know about the future of data centers? If you're like 50% of organizations, then it's probably not enough. Read on to get up to speed on this emerging field.
The viewer will learn how to implement Singleton Design Pattern in Java.
Viewers will learn how to properly install Eclipse with the necessary JDK, and will take a look at an introductory Java program. Download Eclipse installation zip file: Extract files from zip file: Download and install JDK 8: Open Eclipse and …

824 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question