我有一个用国家实体映射的userAccount实体.UserAccount类中的国家/地区映射是这样的
@ManyToOne(fetch=FetchType.EAGER)
@Fetch(FetchMode.JOIN)
@JoinColumn(name="f_country_id", nullable=true, insertable=false, updatable=false)
private Country country;
Run Code Online (Sandbox Code Playgroud)
即使将fetchmode定义为Join,hibernate也会触发单独的SQL Select以获取国家/地区.
Sat*_*was 17
删除fetch=FetchType.EAGER.Eager fetching触发级联select语句.
sol*_*ola 10
Satadru Biswas在之前的评论中给出了答案.
当您使用Query接口(Session.createQuery)时,Hibernate 3.x会忽略FetchMode注释,因此在这种情况下,您必须将INNER JOIN FETCH子句添加到查询的FROM部分.
然而,标准界面将正确使用此界面.
小智 6
我尝试在所有api(JPQL和CriteriaBuilder)中使用@Fetch(FetchMode.JOIN)hibernate注释,但是没有用.只有服务类中的代码可以正常工作:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<UserAccount > cq = cb.createQuery(UserAccount.class);
Root<UserAccount> o = cq.from(UserAccount.class);
o.fetch("country",JoinType.INNER);
em.createQuery(cq.select(o)).getResultList();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22039 次 |
| 最近记录: |