2010-07-21 29 views
8

Tôi nhận được ngoại lệ sau khi tạo cá thể và giữ nguyên. Nó nói chỉ số ra khỏi phạm vi cho các tham số vì vậy tôi đoán nó cố gắng để thêm 6 tham số (cho 6 lĩnh vực của tôi) thay vì 4. Tôi có thiếu một số chú thích?Sự cố khi kiên trì Thực thể

Bất kỳ ý tưởng nào?

tôi chạy trên JBoss 4.2 và MySql

được thông báo lỗi như sau

2007-07-19 17:19:15,968 DEBUG [org.hibernate.SQL] insert into jobitems (server, comments, forumId, parsingJobId) values (?, ?, ?, ?) 
2007-07-19 17:19:15,968 INFO [org.hibernate.type.IntegerType] could not bind value '1' to parameter: 5; Parameter index out of range (5 > number of parameters, which is 4). 
2007-07-19 17:19:15,968 DEBUG [org.hibernate.jdbc.AbstractBatcher] about to close PreparedStatement (open PreparedStatements: 1, globally: 1) 
2007-07-19 17:19:15,968 DEBUG [org.hibernate.jdbc.ConnectionManager] skipping aggressive-release due to flush cycle 
2007-07-19 17:19:15,968 DEBUG [org.hibernate.util.JDBCExceptionReporter] could not insert: [com.vico.software.tools.parsing.entities.JobItem] [insert into jobitems (server, comments, forumId, parsingJobId) values (?, ?, ?, ?)] 
java.sql.SQLException: Parameter index out of range (5 > number of parameters, which is 4). 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:910) 
at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:2740) 
at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:2771) 
at com.mysql.jdbc.PreparedStatement.setInt(PreparedStatement.java:2722) 
at org.jboss.resource.adapter.jdbc.WrappedPreparedStatement.setInt(WrappedPreparedStatement.java:117) 

Trả lời

1

Đó có thể là một lỗi ngủ đông - cập nhật lên phiên bản mới nhất có thể.

Trong mọi trường hợp - sử dụng @Transient trên các trường mà bạn không muốn tồn tại.

+0

khi tôi xem hibernate api, có mã: if (id! = Null) id => JobItemId [forumId: 2, parsingJobId: 1]. do đó nó error.i undanstand. – user397553

+0

@PrimaryKeyJoinColumn ==> @ JoinColumn, JobItemId ==> forumId ==> @ Cột. không sao đâu !!! – user397553

+0

@ cloud-w nếu câu trả lời phù hợp với bạn, đánh dấu nó là được chấp nhận. – Bozho

3

Bạn đang sử dụng ánh xạ tương thích JPA 1.0, đó là các mối quan hệ và các trường có thừa @Column có cùng các cột. @PrimaryKeyJoinColumn giống như @JoinColumn(..., insertable = false, updatable = false), xem here. Một trong số chúng phải được ghi để hoạt động chính xác. Cách bạn đã lập bản đồ cả hai đều không thể ghi được.

Vì vậy, về cơ bản bạn có thể làm hai việc:

  1. Đặt read-only vào các mối quan hệ
  2. Đặt read-only vào @Column s lĩnh vực dư thừa

... và loại bỏ nó từ người khác.

Bạn chỉ có thể thay thế @PrimaryKeyJoinColumn bằng @JoinColumn và điều này sẽ làm điều đó. Tuy nhiên, Hibernate được biết là có vấn đề với chỉ đọc trên các trường @Column dư thừa, vì vậy, bạn phải xóa ..., insertable = false, updatable = false) khỏi số @Column s tại đây. Đây là nguyên nhân gây ra ngoại lệ kỳ lạ này. Tôi thực sự coi đó là một lỗi. Điều này ảnh hưởng đến tất cả các phiên bản gần đây của Hibernate 3.x lên đến 4.0.

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