2010-02-26 26 views
18

giả sử tôi có một chuỗi, được gọi là TEST_SEQ cách chọn đúng giá trị tiếp theo của nó là gì? tính năng này không hoạt động:Cách "đúng" để chọn giá trị chuỗi tiếp theo trong HSQLDB 2.0.0-rc8

select next value for TEST_SEQ

có thể vì mệnh đề "FROM". nhìn HSQLDialect.getSequenceNextValString() trong chế độ ngủ đông tôi thấy điều này:

"select next value for " + sequenceName + " from dual_" + sequenceName

mà trong trường hợp của tôi sẽ dẫn đến một cái gì đó như:

select next value for TEST_SEQ from dual_TEST_SEQ

mà không làm việc cho 2.0.0-RC8 (i chỉ giả định công trình này trong phiên bản trước 2.0 - xác minh havent) Tôi đã xem một giải pháp liên quan đến việc tạo một bảng đơn giản với 1 hàng được gọi là DUAL, trong trường hợp này sẽ hoạt động (phong cách oracle):

select next value for TEST_SEQ from DUAL

nhưng hsqldb không đi kèm với bảng này ra khỏi hộp, và im không chắc chắn làm thế nào tôi có thể có được ngủ đông để tạo ra một bảng trên "khởi động đầu tiên".

Im nghĩ rằng phải có một cách để có được giá trị tiếp theo cho một chuỗi ra khỏi hộp và im chỉ thiếu nó. bất kỳ ý tưởng nào?

Trả lời

23

giả sử tôi có một chuỗi, được gọi là TEST_SEQ thì cách nào chính xác để chọn giá trị tiếp theo?

Trong khi documentation nói:

Giá trị tiếp theo cho một chuỗi có thể được bao gồm trong SELECT, INSERT và UPDATE báo cáo như trong ví dụ sau:

SELECT [...,] NEXT VALUE FOR <sequencename> [, ...] FROM <tablename>; 

các " đúng "cách (vì đơn giản hơn, bởi vì không liên quan đến một bảng như một bảng DUAL câm mà HSQLDB không có) sẽ là:

call NEXT VALUE FOR [sequence_name]; 

này xuất hiện trong 1.7.2 và ông này thực sự như thế nào Hibernate xử lý chuỗi trong HSQLDialect của phiên bản "gần đây" của Hibernate Core (thấy HHH-2839 ).

Và quả thực, đây là những gì tôi nhìn thấy trong HSQLDialect của hibernate-core-3.3.0.SP1.jar:

public String getSequenceNextValString(String sequenceName) { 
    return "call next value for " + sequenceName; 
} 

Vì vậy, lời khuyên của tôi là: nâng cấp lên một phiên bản mới hơn của Hibernate, bạn đang rất có khả năng sử dụng Hibernate Lõi 3.2.5 hoặc trước .

+0

@ hatchetman82 Bạn được chào đón. BTW: Cách phổ biến để nhận ra câu trả lời hay là nâng cấp nó;) –

+1

@ hatchetman82 Không sao cả. Nó chỉ là nếu bạn xem xét một câu trả lời như là một câu trả lời hay (rất có thể nếu bạn chấp nhận nó), sau đó nó có ý nghĩa để upvote nó IMO, đây là cách SO hoạt động. –

+0

Xin chào, điều này có thể liên quan. Tôi đang sử dụng DdlUtils của Apache để tạo cơ sở dữ liệu khi khởi động bằng cách sử dụng xml này cho id: ''. Tôi nên làm gì để có được một giá trị khóa mới khi chèn các đối tượng? Tôi cũng đang sử dụng iBatis. –

2

Rõ ràng nếu bạn chạy

SET DATABASE SQL SYNTAX PGS (PGS đứng cho Postgres)

sau đó bạn có thể truy vấn nó sử dụng cú pháp Postgres tiêu chuẩn như select nextval('sequence_name')http://hsqldb.org/doc/guide/dbproperties-chapt.html

Cũng lưu ý rằng nếu bạn một lần làm được điều này, điển hình HSQLDB trình tự như call NEXT VALUE FOR SEQUENCE_NAME sẽ không hoạt động nữa.

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