Skip to content

Lazy-loading doesn't work with Set #117

@jblaufuss

Description

@jblaufuss

We are using Empire for the ORM layer of our application. We have several entities that have java.util.LinkedHashSet collections that are annotated to be lazy-loading with @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL), however we are observing these entities being eager-loaded in our application despite the annotation.

I have spent some time debugging this, and it appears this is due to the way Empire's javaassist proxies are interacting with the java.util.LinkedHashSet implementation: when the proxies are put into the LinkedHashSet's backing LinkedHashMap, the entity-proxy's hashCode() method is called (from HashMap.hash(Object)), which then triggers the ProxyHandler to load the actual entity data. This can happen recursively, causing an eager load of quite a lot of entities despite the consistent use of FetchType.LAZY.

We found this issue in the develop branch (we pulled it in sometime in early 2016).

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions