Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

171
Views
Spring Data conditionally fetch children

I've read Spring Data JPARepository: How to conditionally fetch children entites. But I want to use convenient JPA annotations rather than manual join all children.

Say I have the following Model:

@Entity
public class UserModel extends BaseModel<User> {

    @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    private List<CredentialModel> credentialList = new ArrayList<>();

    @ManyToMany
    @JoinTable(
            name = "users_actions",
            joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"),
            inverseJoinColumns = @JoinColumn(name = "action_id", referencedColumnName = "id")
    )
    private List<ActionMode> actionList = new ArrayList<>();
}

Fetching credentialList and actionList can be a time consuming operation (join fetches, etc). I do not want to auto fetch credentialList nor actionList . But when I access them, I expect them to be an empty List rather than LazyInitializationException.

Can I use the fields even when I did not specifically JOIN FETCH them in @Query. Just leave it to be an empty list.

If not, Is there anyway to achieve same needs?

about 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Returning empty Collections would lead to a problem: You couldn't distinguish between a really empty collection and one, that just isn't lazily loaded. You could check for the collections before accessing them through org.hibernate.Hibernate.isInitialized(...) or PersistenceUnitUtil#isLoaded(...) in JPA2.

However I would suggest you to use Data-Transfer-Objects at this point. For the special use-case, where the collections are not needed, just build a similiar copy of your entity without that unnesseccary properties. Of course your DTO building must be done within an open session.

about 4 years ago · Santiago Trujillo Report

0

I think you are trying to do JOIN but not FETCH, may be just using child objects' attributes in where condition. I wonder something like this will work in JPQL.

@Query("Select u from UserModel u INNER JOIN u.credentialList c
 INNER JOIN u.actionList a")
about 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!