2015-03-09 17 views
10

Ông có thể giải thích sự khác biệt giữa hai loại sau đây của các giao dịch:là gì khác biệt giữa một "giao dịch mùa xuân" và "giao dịch Hibernate"

  1. Hibernate giao dịch
  2. giao dịch Xuân

Ngoài ra tôi muốn biết về chú thích @Transactional.

+1

Trình quản lý giao dịch Spring (khi được định cấu hình đúng) có thể quản lý các giao dịch ngủ đông. '@ Transactional' là cách để khai báo các phương thức giao dịch trong' Spring'. Vì vậy, sự khác biệt là giống như trong một bánh xe và một tay lái, khi "cấu hình đúng" xoay tay lái di chuyển bánh xe ... và cả hai đều là bánh xe :). – Augusto

Trả lời

10

Tốt cho người mới bắt đầu, chúng đều là Giao dịch, nhưng chúng bao gồm các khái niệm và thành phần khác nhau.

TL; DR

giao dịch với các giao dịch cụ thể cơ sở dữ liệu Hibernate, trong khi mùa xuân cung cấp dịch vụ quản lý giao dịch chung. @Transactional là một cách hay để định cấu hình hành vi quản lý giao dịch.

Câu chuyện dài:

Giao dịch

giao dịch về cơ bản các đơn vị công tác (tức là thay đổi một cái gì đó) được quản lý như một hoạt động đơn lẻ mà có thể là cam kết hoặc cuộn lại. Có rất nhiều loại giao dịch khác nhau trong thế giới java - cơ sở dữ liệu, hệ thống nhắn tin như JMS, giao dịch ứng dụng giữa (đối với những người không yếu tim) hoặc bất kỳ thứ gì khác có thể cần được đưa vào giao dịch. Trong các giao dịch chuẩn Java được quản lý bằng cách sử dụng Java Transaction API để đặt ra các quy tắc về cách tham gia giao dịch.

Hibernate

Hibernate là một ORM cho trừu tượng hóa các thành phần cơ sở dữ liệu để các đối tượng Java, vì vậy các giao dịch của mình có liên quan đặc biệt để thay đổi thực hiện trong vòng một cơ sở dữ liệu. Một giao dịch có thể được tạo thành từ một hoặc nhiều lần ghi vào các bảng cơ sở dữ liệu khác nhau, tất cả đều được thực hiện khi thao tác hoàn tất. Quay trở lại giao dịch, ví dụ f có bất kỳ lỗi nào trong quá trình hoạt động, cho phép tất cả các thay đổi được hoàn tác.

Xuân

Tại mức thấp nhất Spring là một khung ứng dụng để quản lý cấu hình và phụ thuộc giữa các đối tượng. Ngoài ra nó cũng cung cấp một giao diện để quản lý các dịch vụ mức cao hơn được sử dụng trong các ứng dụng hiện đại như cơ sở dữ liệu, dịch vụ nhắn tin, khung MVC và các giao dịch.

Mùa xuân được thiết kế để được sử dụng như một tổng thể bao gồm các đối tượng và dịch vụ trong ứng dụng của bạn, do đó khái niệm giao dịch ở mức cao hơn các giao dịch cụ thể của cơ sở dữ liệu. Spring Transactions được thiết kế để cung cấp cho bạn quyền kiểm soát hạt mịn của tất cả các tài nguyên giao dịch của bạn trong khi trừu tượng hóa mã hóa thường lộn xộn cần thiết để phối hợp các giao dịch.

@Transactional

Spring cung cấp một vài phương pháp khác nhau cho việc sử dụng các giao dịch - số những người khác có mặt dựa xml, mã hóa cho các API và các giao dịch khai báo chú thích dựa.Các giao dịch dựa trên chú thích rất tiện lợi vì bạn không cần thêm mã boilerplate quản lý giao dịch vào ứng dụng của mình (thậm chí sử dụng PlatformTransactionManager thông qua API có khá nhiều chi phí mã hóa). Vì vậy, về cơ bản những gì xảy ra với @Transactional là tại thời điểm chạy mùa xuân quét mã cơ sở của bạn cho các lớp và phương thức @Transactional và kết thúc chúng trong mã quản lý cụ thể của giao dịch, dựa trên những gì bạn đã định cấu hình thông qua chú thích. Vì vậy, một phương pháp như sau:

@Transactional(propagation = REQUIRES_NEW, rollbackFor = {Exception.class}) 
public void saveAndSendMessage(Foo foo) throws Exception { 
    dbManager.save(foo); 
    Bar bar = transform(foo); 
    jmsSystem.send(bar); 
} 

có thể thiết lập giao dịch mới cho cơ sở dữ liệu và hệ thống jms và không cần thêm tất cả mã quản lý tx cụ thể một cách tự động.

Các vấn đề liên quan