Các chú thích @Id và @GeneratedValue(strategy = GenerationType.IDENTITY) là gì?

1. Tổng quan
@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY)

Tại sao chúng ta đang sử dụng chú thích này? tôi cần phải biết nếu điều này tự động tăng giá trị id bảng của tôi. (GenerationType.IDENTITY) có bất kỳ loại nào khác thực sự xảy ra khi chúng tôi sử dụng chú thích này

public class Author extends Domain
{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id") 
    private Integer id;

    @Basic(optional = false)
    @Column(name = "name") 
    private String name;

    @Column(name = "address") 
    private String address; 

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "authorId")
    private List<Book>
    bookList;

    public Author()
    { 
        setServiceClassName("wawo.tutorial.service.admin.AuthorService");
    }
}

* Có cần thiết phải mở rộng lớp trừu tượng Miền không? Sử dụng là gì?

Hãy để tôi trả lời câu hỏi này:
[.__.] Trước hết, sử dụng các chú thích làm phương thức cấu hình của chúng tôi chỉ là một phương thức thuận tiện thay vì đối phó với tệp cấu hình XML vô tận.

Chú thích _@Id_ được kế thừa từ _javax.persistence.Id_ , chỉ ra trường thành viên bên dưới là khóa chính của thực thể hiện tại. Do đó, khung Hibernate và spring của bạn cũng như bạn có thể thực hiện một số reflect hoạt động dựa trên chú thích này. để biết chi tiết, vui lòng kiểm tra javadoc cho Id

Chú thích _@GeneratedValue_ là để định cấu hình cách tăng của cột (trường) đã chỉ định. Ví dụ: khi sử dụng Mysql, bạn có thể chỉ định _auto_increment_ trong định nghĩa của bảng để làm cho nó tự tăng lên, sau đó sử dụng

_@GeneratedValue(strategy = GenerationType.IDENTITY)
_

trong mã Java để biểu thị rằng bạn cũng thừa nhận sử dụng chiến lược phía máy chủ cơ sở dữ liệu này. Ngoài ra, bạn có thể thay đổi giá trị trong chú thích này để phù hợp với các yêu cầu khác nhau.

1. Xác định trình tự trong cơ sở dữ liệu

Chẳng hạn, Oracle phải sử dụng sequence làm phương thức tăng dần, giả sử chúng ta tạo một chuỗi trong Oracle:

_create sequence Oracle_seq;


2. Tham khảo trình tự cơ sở dữ liệu

Bây giờ chúng ta có chuỗi trong cơ sở dữ liệu, nhưng chúng ta cần thiết lập mối quan hệ giữa Java và DB, bằng cách sử dụng @SequenceGenerator :

_@SequenceGenerator(name="seq",sequenceName="Oracle_seq")

sequenceName là tên thật của một chuỗi trong Oracle, name là tên bạn muốn gọi nó trong Java. Bạn cần chỉ định sequenceName nếu nó khác với name, nếu không, chỉ cần sử dụng name. Tôi thường bỏ qua sequenceName để tiết kiệm thời gian của mình.

3. Sử dụng trình tự trong Java

Cuối cùng, đã đến lúc sử dụng chuỗi này trong Java. Chỉ cần thêm @GeneratedValue :

_@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq")
_

Trường generator đề cập đến trình tạo trình tự bạn muốn sử dụng. Lưu ý rằng đó không phải là tên chuỗi thực trong DB, mà là tên bạn đã chỉ định trong trường name của SequenceGenerator.

4. Hoàn thành

Vì vậy, phiên bản hoàn chỉnh nên như thế này:

_public class MyTable
{
    @Id
    @SequenceGenerator(name="seq",sequenceName="Oracle_seq")        
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq")               
    private Integer pid;
}
_

Bây giờ hãy bắt đầu sử dụng các chú thích này để làm cho việc phát triển JavaWeb của bạn dễ dàng hơn.

Trong ngữ cảnh Ánh xạ quan hệ đối tượng, mọi đối tượng cần phải có một định danh duy nhất. Bạn sử dụng @Id chú thích để chỉ định khóa chính của thực thể.

@GeneratedValue chú thích được sử dụng để chỉ định cách tạo khóa chính. Trong ví dụ của bạn, bạn đang sử dụng một chiến lược Identity

Leave a Reply

Your email address will not be published.