2012-06-01 35 views
7

Tôi đang sử dụng mã này ở chế độ ngủ đông.Chiến lược giá trị tạo Hibernate

@Id @GeneratedValue(strategy = GenerationType.AUTO) 
@Column(name="RightID", unique=true, nullable=false) 

Vấn đề là khi tôi xóa một hàng 'RightId' không giữ nguyên theo thứ tự. Tôi muốn một cái gì đó như, hibernates nên kiểm tra id, nếu một số id giá trị bị thiếu nó phải cung cấp cho giá trị đó để 'RightsId' nếu không tiến hành bình thường

Trả lời

4

Cơ sở dữ liệu không quan tâm nếu có lỗ trong trình tự. Nói chung, có thể và dễ dàng thay đổi thiết kế ứng dụng để nó không mong đợi danh sách các giá trị id không chứa lỗ hổng.

Nếu một số lý do lẻ buộc thiết kế như vậy, bạn phải sử dụng trình tạo tùy chỉnh. Bạn có thể tìm thấy chi tiết triển khai thông qua câu hỏi này: Hibernate ID Generator

9

Tôi không nghĩ có bất kỳ optio nào khả dụng ở chế độ ngủ đông. Thay vì AUTO, bạn có thể thử các tùy chọn chiến lược sau đây cũng:

  1. GenerationType.TABLE - nhà cung cấp kiên trì sử dụng một bảng cơ sở dữ liệu để quản lý phím.

  2. GenerationType.SEQUENCE - nhà cung cấp kiên trì sử dụng chuỗi cơ sở dữ liệu để tạo khóa. Cơ sở dữ liệu phải hỗ trợ Trình tự

  3. GenerationType.IDENTITY - nhà cung cấp kiên trì sẽ xóa cơ sở dữ liệu để tạo khóa. Cơ sở dữ liệu phải hỗ trợ kiểu cột IDENTITY.

Một điểm khác: Họ có thể không cung cấp tùy chọn như vậy vì nó cũng sẽ làm chậm hiệu suất. Đối với mỗi lần chèn, nó sẽ phải tìm kiếm trong toàn bộ cột ID. Bạn có thể tưởng tượng nó sẽ ảnh hưởng đến hiệu suất như thế nào.

0

Lý do chính này không được hỗ trợ nội bộ là bảo mật. hãy để tôi cung cấp cho bạn một ví dụ,

1. An ninh

Chúng tôi có một cơ sở dữ liệu cho SimCards di động trong đó có số nhận dạng duy nhất. Nếu sim của bạn bị mất và sau đó bạn bỏ kích hoạt nó. Nhưng cho phép nói rằng một số người dùng khác đã mua một sim mới và sim đó cho số cũ duy nhất mà sim của bạn có (theo logic của bạn). Sau đó, nó có thể dẫn đến một vấn đề. Giống như cho phép nói rằng người dùng mới thực hiện một số hành động khủng bố, sau đó cảnh sát sẽ theo dõi số sim đó và có thể đến với bạn. (Như ông là người dùng mới và một số ... Điện thoại

2 độ trễ

Và chắc chắn sự cố hiệu suất là. Mỗi tìm kiếm để tìm số thứ tự không sử dụng sẽ là O (n) thay vì thẳng về phía trước O (1).

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