강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của redthink902392
redthink902392

câu hỏi đã được viết

Lập trình JPA tiêu chuẩn Java ORM - Cơ bản

양방향 매핑 질문 드립니다.

Viết

·

305

0

class Item(
id: Long,
orderId: String,
) {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Long = id

var orderId: String = orderId


@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "shipping_id")
var shipping: Shipping? = null

}

@Entity
class Shipping(
) {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Long = id

@Embedded
var trackingInformation: TrackingInformation? = null


@OneToMany(mappedBy = "shipping", cascade = [CascadeType.ALL], fetch = FetchType.LAZY)
var items: MutableList<Item> = mutableListOf()


fun updateTrackingInformation(trackingInformation: TrackingInformation) {
this.trackingInformation = trackingInformation
}

}
// 위처럼 양방향 연관관계를 맺었는데
// 이것도 되고
class Facade(
private val shippingService: ShippingService,
private val itemService: ItemService,
) {

fun getResult(pipeline: String) {

val shipping = shippingService.getShippings(listOf("0000000003")).first()
shipping.items.first().setOrderId("test")

shippingService.save(shipping)
}
}

// 이것도 됩니다.
class Facade(
private val shippingService: ShippingService,
private val itemService: ItemService,
) {

fun getResult(pipeline: String) {
val item = itemService.getItemByKitSlug(result.kitSlug)
item.shipping.updateTrackingInformation(trackingInformation)

itemService.save(item)

}
}

mappedBy로 된 shipping.items 필드로 접근하면 insert, update가 안될 거라고 생각했는데
둘다 변경이 되어서 질문드립니다.

제가 어떤 점을 놓치고 있는 걸까요?

javaJPA

Câu trả lời 2

1

redthink902392님의 프로필 이미지
redthink902392
Người đặt câu hỏi

감사합니다 :)

0

yh님의 프로필 이미지
yh
Người chia sẻ kiến thức

안녕하세요. 도던님

mappedBy는 연관관계에만 영향을 줍니다. 그러니까 FK 값에만 영향을 주는 것이지요.

shipping.items.first().setOrderId("test")

제가 코틀린을 사용하지 않아서 아마 이 코드가 shipping.items의 첫번째 item을 조회해서 orderId를 변경하는 코드 같아요. 그렇다면 Item 객체가 변경된 것이기 때문에 변경감지(Dirty checking)이 발생합니다. 이것은 mappedBy와 무관하게 모든 엔티티에서 발생합니다.

두번째도 변경감지(Dirty checking)이 발생해서 변경된 코드 입니다.

감사합니다.

Hình ảnh hồ sơ của redthink902392
redthink902392

câu hỏi đã được viết

Đặt câu hỏi