jpa - Hibernate FetchMode = Join doesn't work -


i see hibernate firing multiple queries fetchmode=join

below entity classes

 @entity  @table(name = "person")  public class personjpa{   @id   @column(name = "person_id")   @generatedvalue   private long personid;    @onetomany(mappedby = "personid",cascade=cascadetype.all)   @fetch(value = fetchmode.join)   private set<addressjpa> address;   ......  } 

and

 @table(name = "address")  public class addressjpa {    @id   @column(name = "address_id")   @generatedvalue   private long addressid;    @manytoone(fetch = fetchtype.lazy)   @joincolumn(name = "person_id")   private personjpa personid;   } 

how write jpa criteriaquery selects personjap addressjpa list given personid ?

do want retrieve personjpa object given person id, such associated addressjpa set collection loaded? in case, need fetch join.

in criteria api:

entitymanager em = entitymanagerfactory.createentitymanager(); criteriabuilder cb = em.getcriteriabuilder(); criteriaquery<personjpa> query = cb .createquery(personjpa.class); root<personjpa> person = query.from(personjpa.class); query.fetch("address"); query.select(person); parameterexpression<long> p = cb.parameter(long.class); query.where(cb.equal(cb.get("personid"), p)); 

in jp ql:

select p personjpa p join fetch p.address p.personid = :p 

alternatively, might want specify fetch mode (eager) in annotations (since default associated collections lazily loaded):

@onetomany(mappedby = "personid",cascade=cascadetype.all, fetch=fetchtype.eager) private set<addressjpa> address; 

@fetch annotation hibernate specific , not jpa. specifies strategy on how data should fetch. see more info here.


Comments

Popular posts from this blog

1111. appearing after print sequence - php -

java - WARN : org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/board/] in DispatcherServlet with name 'appServlet' -

Ruby on Rails, ActiveRecord, Postgres, UTF-8 and ASCII-8BIT encodings -