2015-10-13 30 views
13

Hiện nay chúng tôi đang sử dụng mysql như một cơ sở dữ liệu và chúng tôi sử dụngGenerationType.AUTO vs GenerationType.IDENTITY trong ngủ đông

@Generated Value(strategy = GenerationType.IDENTITY)

Đó là làm việc một cách hoàn hảo vào tình huống nhất định chúng ta cần phải di chuyển cơ sở dữ liệu của chúng tôi để Oracle tại thời điểm đó nó không làm việc đúng cách.Nếu bất kỳ ai biết sự khác biệt thực sự có mặt đằng sau điều này và nó hoạt động như thế nào?

+0

những gì nhà cung cấp ORM bạn đang sử dụng? –

+0

Hibernate và JPA –

Trả lời

11

Làm cách nào để "hoạt động bình thường" (bạn không xác định thông tin cơ bản như ý bạn là gì) với Oracle? Tôi không thấy mức độ liên quan của AUTO đối với câu hỏi của bạn - điều đó chỉ đơn giản cho phép triển khai chọn những gì nó muốn sử dụng.

"IDENTITY" (theo JPA javadocs và thông số kỹ thuật - những gì bạn nên đề cập đến) có nghĩa là autoincrement. Không có khái niệm như vậy trong Oracle, nhưng có trong MySQL, SQLServer và một vài người khác. Tôi mong đợi bất kỳ sự thực thi JPA nào để đánh dấu một lỗi khi thậm chí thử một thứ như vậy.

Oracle sẽ cho phép "SEQUENCE", hoặc "TABLE" chiến lược được sử dụng tuy nhiên

+1

có, Như bạn đã nói không có tùy chọn Auto increment trong oracle.but nếu tôi sử dụng GenerationType.AUTO mô hình đang làm việc cho cơ sở dữ liệu oracle vì nếu tôi cung cấp cho Auto JPA tự động lấy kiểu được tạo theo cơ sở dữ liệu. cảm ơn bạn đã làm rõ. –

3

Trích dẫn Java Persistence/Identity and Sequencing:

nhận dạng trình tự sử dụng cột SẮC đặc biệt trong cơ sở dữ liệu để cho phép các cơ sở dữ liệu để tự động gán một id cho đối tượng khi hàng của nó được chèn vào. Cột nhận dạng được hỗ trợ trong nhiều cơ sở dữ liệu, chẳng hạn như MySQL, DB2, SQL Server, Sybase và Postgres. Oracle không hỗ trợ các cột IDENTITY nhưng chúng có thể được mô phỏng thông qua việc sử dụng các đối tượng chuỗi và trình kích hoạt.

vì vậy tôi thích sử dụng SEQUENCE thay

đối tượng Trình tự sử dụng đối tượng cơ sở dữ liệu đặc biệt để tạo ra id. Các đối tượng chuỗi chỉ được hỗ trợ trong một số cơ sở dữ liệu, chẳng hạn như Oracle, DB2 và Postgres. Thông thường, một đối tượng SEQUENCE có tên, INCREMENT và các thiết lập đối tượng cơ sở dữ liệu khác. Mỗi lần .NEXTVAL được chọn, chuỗi được tăng lên bằng INCREMENT.

Ví dụ:

@Entity 
public class Employee { 
    @Id 
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="EMP_SEQ") 
    @SequenceGenerator(name="EMP_SEQ", sequenceName="EMP_SEQ", allocationSize=100) 
    private long id; 
    ... 
} 
Các vấn đề liên quan