2009-12-03 34 views
15
@Entity 
public class Person { 
    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    private Long id; 

    private int salary; 

    @Version 
    private long version; 

    // ...getters and setters 
} 
  1. Bắt buộc phải tạo setter/getter cho version?
  2. Khi kiên trì thực thể này với Hibernate, tôi không cần phải đặt giá trị này theo cách thủ công, phải không?
  3. Tôi cần phải định cấu hình gì khác để sử dụng kiểm tra đồng thời lạc quan với số hibernateTemplate.saveOrUpdate của Spring? Tất cả cơ sở dữ liệu có được hỗ trợ không?
  4. Làm cách nào để kiểm tra đơn vị này? Trong cơ sở dữ liệu của tôi tất cả hồ sơ của tôi hiển thị trường phiên bản có giá trị 0
  5. Gọi điện thoại hibernateTemplate.saveOrUpdate có tăng giá trị phiên bản mỗi lần không?

Trả lời

12

tôi sẽ nói:

  1. bộ/có được phiên bản là cần thiết, như bạn có thể gán các phiên bản chính mình đôi khi (khi tái tạo một thể hiện mới từ dữ liệu cũ)
  2. Bạn không cần nếu bạn đọc ví dụ từ cơ sở dữ liệu. (Khi tạo mã trong mã của bạn với mã mới, nó sẽ là một câu chuyện khác).
  3. Tôi không thấy gì khác. Tôi chưa bao giờ gặp vấn đề với cơ sở dữ liệu.
  4. Kiểm tra đơn vị không đi theo cơ sở dữ liệu theo ý kiến ​​của tôi, vì vậy các thử nghiệm liên quan đến cơ sở dữ liệu được gọi là kiểm tra tích hợp. Bạn không nên có quá nhiều, vì chúng chậm, và chúng không thực sự kiểm tra mã của bạn, nhưng nhiều mã Hibernate/Driver/Database ... Bạn nên tin tưởng chúng, hoặc chỉ kiểm tra chúng một lần, nhưng không cho tất cả các thực thể của bạn.
    Để xem các giá trị phiên bản lớn hơn 0, hãy đọc/sửa đổi/cập nhật thực thể của bạn trong một giao dịch, phiên bản tăng thêm một. Hãy thoát khỏi giao dịch, thực hiện lại, tăng giá trị ...
  5. Phiên bản sẽ tăng mỗi khi hàng cơ sở dữ liệu được sửa đổi.
+0

@KLE chỉ trong trường hợp 2 người dùng gọi hibernatetemplate.saveorupdate cùng một lúc, không cần phải kiểm tra thêm khi gọi hibernatetemplate.saveorupdate? bất kỳ ngoại lệ ném? – cometta

+1

@cometta Điểm không phải là để tiết kiệm hay không, nhưng nơi mà các dữ liệu đến từ. Trong một giao dịch, ** nếu bạn đọc một thực thể từ cơ sở dữ liệu **, thông tin phiên bản của nó được cập nhật. Khi bạn lưu nó, nó được tự động chăm sóc. Nếu bạn xảy ra một ngày nào đó để lấy dữ liệu từ một nguồn khác (ví dụ như bài đăng của một biểu mẫu), và tạo lại thực thể, thì bạn phải tự chăm sóc bản thân. – KLE

+0

Một lời giải thích khá tốt là ở đây: http://en.wikibooks.org/wiki/Java_Persistence/Locking – Zilvinas

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