5

Tôi biết rằng khi ghi đè hashcode()equals() đối tượng cố định của mình, tôi không nên bao gồm ID và chỉ bao gồm các thuộc tính có ý nghĩa xác định duy nhất đối tượng . Nhưng còn trường version nào được sử dụng cho điều khiển đồng thời tối ưu lạc quan bởi Hibernate? Tôi có nên bỏ qua nó, giống như ID? Điều gì nếu chúng ta hãy nói new User(name='John', version=1).equals(new User(name='John',version=2)), nó sẽ không gây nhầm lẫn OCC Hibernate bằng cách nào?Hibernate: Tôi có nên bao gồm trường 'phiên bản' thành phương thức hashcode() và equals()

Trả lời

3

Chúng tôi khuyên bạn nên triển khai equals() và hashCode() bằng cách sử dụng bình đẳng khóa doanh nghiệp. Kinh doanh bình đẳng chính có nghĩa là phương thức equals() chỉ so sánh các thuộc tính tạo thành khóa nghiệp vụ. Nó là chìa khóa đó sẽ xác định ví dụ của chúng ta trong thế giới thực (một phím ứng cử viên tự nhiên)

Vì vậy, bạn nên không bao gồm sở hữu phiên bản trong equals()hashcode()

Tham khảo: http://docs.jboss.org/hibernate/core/3.3/reference/en/html/persistent-classes.html#persistent-classes-equalshashcode

+0

Yeah, tôi đã đọc điều đó. Nhưng vì trường 'version' không được đề cập ở đó và có tính đến mục đích của nó (các giá trị khác nhau có nghĩa là các đối tượng khác nhau) mà tôi nghi ngờ. Nhưng Hibernate khuyến cáo không nên sử dụng 'phiên bản' cho bất kỳ thứ gì khác trong ứng dụng. Vì vậy, càng suy nghĩ về nó thì tôi càng bị thuyết phục rằng 'phiên bản' nên ** không được bao gồm trong' equals() 'và' hashcode() '. – wajda

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