Từ quan điểm Hibernate, nó không thay đổi bất kỳ thứ gì như Hibernate sử dụng cùng kiểu Hibernate đại diện cho chúng.
Tuy nhiên, như được chỉ ra bởi Bytecode Ninja, bạn không thể phân biệt giá trị mặc định của 0 nguyên thủy từ 0 được gán trong khi không có sự mơ hồ có thể với giá trị rỗng (id rỗng luôn có nghĩa là thực thể mới) , đó là lý do tại sao tôi thích sử dụng một loại wrapper nullable.
Và đây là đề xuất Hibernate. Từ Tài liệu tham khảo:
4.1.2. Cung cấp thuộc tính số nhận dạng (tùy chọn)
Mèo có thuộc tính được gọi là id. Thuộc tính này ánh xạ tới cột khóa chính của một bảng cơ sở dữ liệu. Bất động sản có thể đã được gọi là bất cứ điều gì, và loại của nó có thể đã được bất kỳ loại nguyên thủy, bất kỳ nguyên thủy "wrapper" loại, java.lang.String hoặc java.util.Date. Nếu bảng cơ sở dữ liệu kế thừa của bạn có các khóa tổng hợp, bạn có thể sử dụng lớp do người dùng xác định với các thuộc tính của các loại này (xem phần về số nhận dạng tổng hợp sau này trong chương.)
Thuộc tính nhận dạng là tùy chọn hoàn toàn. Bạn có thể để chúng ra và để Hibernate theo dõi các định danh đối tượng trong nội bộ. Tuy nhiên, chúng tôi không khuyến cáo điều này.
Trong thực tế, một số chức năng chỉ dành cho các lớp học tuyên bố một đặc tính nhận dạng:
Transitive reattachment cho các đối tượng tách ra (cập nhật thác hoặc thác merge) - xem Phần 10.11, “kiên trì Transitive” Session.saveOrUpdate () Session.merge() Chúng tôi khuyên bạn nên khai báo các thuộc tính định danh được đặt tên nhất quán trên các lớp liên tục và bạn sử dụng một loại nullable (nghĩa là không nguyên thủy).
Và tôi thực sự tận dụng này trong lớp cơ sở của tôi:
@MappedSuperclass
public class BaseEntity implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Transient
public boolean isNew() {
return (this.id == null);
}
}
Vui lòng kiểm tra thêm chi tiết ở đây: https://stackoverflow.com/posts/3537407/edit
Tôi muốn nói một nullable "savedness" chỉ là rất nhiều một thói quen tốt. (Cho dù đó là ID hay cột phiên bản/dấu thời gian.) – millimoose
+1, một giá trị null là một imin quan trọng. Tôi sử dụng hàm bao trong tất cả các đối tượng thực thể của mình vì cùng một lý do. – Perception
Vì vậy, nó là một wrapper được ưa thích cho phiên bản ID hoặc tem thời gian nhưng không phải cho những người khác? –