English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

hibernate 강제 로드 문제(다중 외래 키 연결)에 대한 간단한 논의

数据库结构如下

strategy中有外键member_id(关联member表)外键strategy_category(关联category表)而member表中有外键position_id(关联positons表)

如果前台页面直接查询stategy表中内容我们hql语句如果这么写

Stringhql="FromStrategywhereid=:id";

컨솔이 nosession 오류를 보고된 이유는 hibernate가 기본적으로 레지트 로드를 사용하여 필요할 때만 연결된 객체를 로드하는 것이며, 우리의 프론트에에서 연결된 객체의 속성을 가져오는 것을 위해 세션을 닫았을 때 오류가 발생합니다.

그렇다면 어떻게 해결할 수 있을까요

이렇게 leftjoinfetch 방식을 사용하여 객체를 로드하는 것이 좋습니다. 그렇지 않으면, 애노테이션에서 기본적으로 설정된 레지트 로드를 급진적 로드로 변경하면 효율성이 매우 낮습니다.

문장은 다음과 같습니다

Strategystrategy=(Strategy)sessionFactoryUtil.getSession()
.createQuery("FromStrategysleftjoinfetchs.strategyCategoryleftjoinfetchs.memberleftjoinfetchs.member.positionswheres.id=:id")
.setInteger("id",id).uniqueResult();

주의해야 할 점은 member 테이블이 positions 테이블과 연결되어 있기 때문에 함께 로드되어야 한다는 점입니다. 또한, 여기서 s.id는 다음과 같이 작성되어야 한다는 점도 주의해야 합니다. 여기서 각 테이블의 주키 이름은 모두 id입니다. 명시하지 않으면 시스템이 인식할 수 없습니다.

요약

이제 이 문서에서 hibernate 급진적 로드 문제(다중 외래 키 연결)에 대한 모든 내용이 끝났습니다. 많은 도움이 되었기를 바랍니다. 관심이 있는 분은 이 사이트의 다른 관련 주제를 계속 참조하시고, 부족한 점이 있으면 댓글을 남겨 주시기 바랍니다. 친구들에게 이 사이트를 지지해 주셔서 감사합니다!

선언: 이 문서의 내용은 인터넷에서 가져왔으며, 원저자의 소유물입니다. 내용은 인터넷 사용자가 자발적으로 기여하고 업로드한 것이며, 이 사이트는 소유권을 가지지 않으며, 인공적으로 편집한 것도 아니며, 관련 법적 책임도 부담하지 않습니다. 저작권 위반이 의심되는 내용이 있으면 notice#w로 이메일을 보내 주시기 바랍니다.3codebox.com에 (이메일을 보내는 경우, #을 @으로 변경하십시오) 신고하시고 관련 증거를 제공하시면, 확인되면 이 사이트는 즉시 위반 내용을 삭제합니다.

추천해드립니다