Skip to content

Instantly share code, notes, and snippets.

@tomatophobia
Last active March 22, 2024 18:38
Show Gist options
  • Save tomatophobia/f47e220674cd7a1193756379977a1676 to your computer and use it in GitHub Desktop.
Save tomatophobia/f47e220674cd7a1193756379977a1676 to your computer and use it in GitHub Desktop.
import javax.persistence.*
@Entity
@Table(name = "member")
class Member(
@Id
@Column(name = "member_id")
var id: String,
var username: String,
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "team_id")
var team: Team?,
)
@Entity
@Table(name = "team")
class Team(
@Id
@Column(name = "team_id")
var id: String,
var name: String,
)
fun logic(em: EntityManager, puu: PersistenceUnitUtil) {
val member = em.find(Member::class.java, "member1")
println(puu.isLoaded(member.team)) // 즉시 로딩 되었는지 확인
println(member.team?.name) // 필드 접근 (지연 로딩 유발)
println(puu.isLoaded(member.team)) // 지연 로딩 되었는지 확인
}
fun main() {
val emf = Persistence.createEntityManagerFactory("pu")
val persistenceUnitUtil = emf.persistenceUnitUtil
var em = emf.createEntityManager()
var tx = em.transaction
try {
tx.begin()
logic(em, persistenceUnitUtil)
tx.commit()
} catch (e: Exception) {
e.printStackTrace()
tx.rollback()
} finally {
em.clear()
}
em.close()
emf.close()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment