2013-06-11 36 views
5

Tôi cần phải điền 2 id khác nhau trong cùng một bảng trên chèn và tôi đang cố gắng sử dụng selectKey để kéo các giá trị từ chuỗi Oracle để điền các id.Có thể trong ibatis để có nhiều hơn một mệnh đề selectKey trong cùng một truy vấn chèn không?

Với một id và chọnTôi không có vấn đề gì nhưng khi tôi thêm lần thứ hai selectKey giá trị dường như không được điền (xem chèn đoạn phía dưới).

Có thể thực hiện việc này không? Hoặc tôi sẽ cần phải tạo một truy vấn khác để cập nhật id thứ hai?

Cảm ơn

<insert id="create" parameterClass="MyObject"> 
<selectKey keyProperty="id" resultClass="long" type="pre"> 
    <include refid="sequences.myObjectId" /> 
</selectKey> 
<selectKey keyProperty="mySecondId" resultClass="long" type="pre"> 
    <include refid="sequences.mySecondId" /> 
</selectKey>  
INSERT INTO MY_OBJECT_TABLE 
(
MY_OBJECT_ID, 
MY_SECOND_ID, 
... 
) 
VALUES 
) 
#id#, 
#mySecondId#, 
... 
) 
</insert> 

Trả lời

3

Chỉ có thể có một lần thôi!

Cuối cùng tôi đã phát hiện ra rằng chỉ có thể có một đoạn thơ trong một đoạn trích chèn ibatis.

Tuy nhiên tôi đã có thể cập nhật quan trọng thứ hai như sau (tôi tin rằng đây là oracle cụ thể):

<insert id="create" parameterClass="MyObject"> 
<selectKey keyProperty="id" resultClass="long" type="pre"> 
    <include refid="sequences.myObjectId" /> 
</selectKey> 
INSERT INTO MY_OBJECT_TABLE 
(
MY_OBJECT_ID, 
MY_SECOND_ID, 
... 
) 
VALUES 
) 
#id#, 
MY_SECOND_ID_SEQUENCE.nextval, 
... 
) 
</insert> 

MY_SECOND_ID_SEQUENCE là tên chuỗi Oracle mà tôi định nghĩa trước.

+0

Tôi không thích trả lời thỏa thuận của riêng mình nhưng cuối cùng đã tìm thấy câu trả lời ở nơi khác. Hy vọng rằng điều này sẽ giúp đỡ người khác trong tương lai. –

+0

Tôi đang sử dụng MS SQL, tôi có một yêu cầu tương tự. Bây giờ ở đây thay vì nhận ** MY_SECOND_ID ** từ chuỗi, tôi cần tìm nạp từ một số bảng khác. Có thể sử dụng truy vấn chọn thay vì chuỗi không? –

+1

Đã một thời gian kể từ khi tôi sử dụng MS SQL nhưng có thể thêm (SELECT ID FROM yourQuery), thay cho MY_SECOND_ID_SEQUENCE.nextval,? –