OK, JPA/Hibernate에 대한 이해가 부족하다고 생각합니다. 나는 두 개의 테이블을 가지고 있습니다 : 학생을 나타내는 학생과 수업에 학생의 과제를 나타내는 CC. CC 테이블에는 학생을 나타내는 STUDENTID 열이 있습니다. 나는 관련된 학생 기록과 함께 CC 레코드를 반환하는 간단한 쿼리를 시도하고있다. 내 CC 클래스는이 (삭제 물건 많이)처럼 보이는 : 나는 "ID"학생들 테이블의 기본 키가 아니기 때문에 referencedColumnName로 지정해야JPA/Hibernate는 쿼리하지만 하위 객체를 할당하지 않음
@Entity
@Table(name="cc")
public class CC {
...
@Column(name="studentid", nullable=false, updatable=false)
private Integer studentid;
@ManyToOne(fetch=FetchType.LAZY, cascade={CascadeType.ALL})
@JoinColumns({ @JoinColumn(name="studentid", referencedColumnName="id",
insertable=false, updatable=false) })
private Student student;
...
}
. 나는 다음과 같은 쿼리하려고 :
EntityManager em = getCurrentEntityManager();
Query query = em.createQuery ("select cc from CC cc inner join fetch cc.student where cc.sectionid=:sectionid");
query.setParameter("sectionid", sectionId);
List<CC> rows = query.getResultList();
if (!CollectionUtils.isEmpty(rows)) for (CC cc: rows) {
Student student = cc.getStudent();
//// PROBLEM: student object is null here (though studentid is correct)!
}
내가 쿼리 프로젝션에 학생 테이블의 열을 함께 테이블에 가입하고도 반환, 최대 절전 모드가 제대로 쿼리를하고있다 볼 수 있습니다
select cc0_.dcid as dcid21_0_, student1_.DCID as DCID7_1_, cc0_.course_number as course2_21_0_,
... student1_.FIRST_NAME as FIRST28_7_1_, student1_.GENDER as GENDER7_1_, ...
from cc cc0_ inner join STUDENTS student1_
on cc0_.studentid=student1_.ID where cc0_.sectionid=?
위에서 언급 한 문제는 STUDENTID 열이 null이 아니고 올바른 경우에도 CC의 "student"하위 객체가 항상 null이라는 것입니다. 나는 틀린 일을하고 있다고 확신하지만, 뭐라구?
학생 목록을 반복 작성하고 CC를받는 것이 좋지 않습니까? – elias
주어진 학생이 들어있는 모든 수업을 찾고 있다면 예. 그러나 반대 정보를 찾고 있습니다. 특정 클래스에 대한 모든 참조 레코드가 필요하며, 동시에 학생의 정보가 필요합니다. – fool4jesus
왜 학생 교실 비공개 학생 학생이 필요한가요? 열은 이미 학생을 지칭하는 외래 키로 db에 저장되어 있습니다. – ayengin