ก่อนอื่นการจัดการธุรกรรมควรทำในเลเยอร์บริการไม่ใช่ในเลเยอร์ DAO ซึ่งจะสร้างค่าใช้จ่ายประสิทธิภาพจำนวนมาก (เพื่อจัดการกับระดับการแยกธุรกรรมที่เหมาะสมและการเผยแพร่ในแต่ละวิธีที่ต่างกัน) นอกจากนี้ขอบเขตของหน่วยงานยังมาจากชั้นบริการแทนที่จะเป็นชั้นการเข้าถึงข้อมูล: ลองนึกภาพการดำเนินกระบวนการทางธุรกิจที่ต้องจัดการกับ DAO 2 ตัวขึ้นไป
มีจำนวนมากของการสนทนาในอินเทอร์เน็ตคือว่าจุดไปในทิศทางที่เป็นที่นี่ , ที่นี่และที่นี่
อย่างไรก็ตามเนื่องจากเป็นการสัมภาษณ์เราจะยอมรับคำถามดังกล่าว จากมุมมองของฉันคุณจะใช้@Transactional
คำอธิบายประกอบ (หรือการกำหนดค่า XML) ในทั้งสองวิธีและด้วยการเผยแพร่ธุรกรรมที่มีREQUIRED
ค่า ด้วยวิธีนี้เมื่อมีการเรียกใช้เมธอดเหล่านั้นและหากไม่มีธุรกรรมก่อนหน้านี้ธุรกรรมใหม่จะถูกสร้างขึ้น:
@Transactional
class MyDAO {
@Transactional(propagation = REQUIRED)
public void foo() {
}
@Transactional(propagation = REQUIRED)
public void bar() {
}
}
foo()
และbar()
แบ่งปันธุรกรรมเดียวกันและหาก 1 ล้มเหลวอีก 1 จะย้อนกลับหรือไม่ คุณช่วยอธิบายได้ไหม