하이버 네이트 5.2.5를 사용하고 (kotlin과 spring 4.3.5가 중요하다면) 나는 클래스의 필드 일부를 느리게로드하기를 원한다. 하지만 문제는 모든 필드가 즉시 로딩된다는 것입니다. Hibernate.initialize()를 사용하지 않는 특별한 Hibernate 설정이 없습니다.Hibernate는 'lazy'페치 타입을 무시하고 즉시 프로퍼티들을로드한다.
@Entity(name = "task")
@Table(name = "tasks")
@NamedQueries(
NamedQuery(name = "task.findById", query = "SELECT t FROM task AS t WHERE t.id = :id")
)
class Task {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
var id: Int? = null
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "author_id", nullable = false)
lateinit var author: User
@OneToOne(fetch = FetchType.LAZY, mappedBy = "task")
var edit: TaskEdit? = null
}
이것은 내가 쿼리 방법
TaskRepoImpl입니다 :
override fun findById(id: Int): Task? {
val task = getCurrentSession().createNamedQuery("task.findById", Task::class.java)
.setParameter("id", id)
.uniqueResult()
return task
}
TaskService :
@Transactional
fun find(id: Int): Task? {
return taskRepo.findById(id)
}
그리고 출력 :
Hibernate: select task0_.id as id1_1_, task0_.author_id as author_i3_1_ from tasks task0_ where task0_.id=?
Hibernate: select user0_.id as id1_3_0_, user0_.enabled as enabled2_3_0_, user0_.name as name3_3_0_, user0_.password as password4_3_0_ from users user0_ where user0_.id=?
Hibernate: select taskedit0_.id as id1_0_0_, taskedit0_.task_id as task_id3_0_0_, taskedit0_.text as text2_0_0_ from task_edits taskedit0_ where taskedit0_.task_id=?
코드에 무엇이 잘못된지, 그리고 Hibernate가 등록 정보를 지연로드하는 방법을 알려주십시오. 고맙습니다!
[이 답변] (http://stackoverflow.com/a/36143746/4754790) 대안 때의 개요를 제공합니다 외부 엔티티가 자식 엔티티에 의해 매핑 된 테이블에있는 일대일 관계가 게으르다. –