Tôi có đối tượng người dùng có quan hệ một-nhiều với các loại Chuỗi. Tôi tin rằng họ là ánh xạ đơn giản. Bảng loại chứa tên user_id và tên biến có liên quan, với khóa chính là 'id' mà về cơ bản là một bộ đếm.Hibernate Lưu hành vi lạ
<class name="Users" table="users">
<id column="id" name="id" />
...
<set name="types" table="types" cascade="save-update">
<key column="id" />
<one-to-many class="Types" />
</set>
</class>
<class name="Types" table="types">
<id column="id" name="id" />
<property column="user_id" name="user_id" type="integer" />
<property column="type" name="type" type="string" />
</class>
Đây là java tôi sử dụng để thêm vào cơ sở dữ liệu:
User u = new User();
u.setId(user_id);
...
Collection<Types> t = new HashSet<Types>();
t.add(new Type(auto_incremented_id, user_id, type_name));
u.setTypes(t);
getHibernateTemplate().saveOrUpdate(u);
Khi tôi chạy nó, nó mang lại cho lỗi này:
61468 [http-8080-3] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 1062, SQLState: 23000
61468 [http-8080-3] ERROR org.hibernate.util.JDBCExceptionReporter - Duplicate entry '6' for key 'PRIMARY'
61468 [http-8080-3] ERROR org.hibernate.event.def.AbstractFlushingEventListener - Could not synchronize database state with session
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
Khi tôi kiểm tra sql, nó hiển thị:
Hibernate: insert into users (name, id) values (?, ?)
Hibernate: insert into types (user_id, type, id) values (?, ?, ?)
Hibernate: update types set id=? where id=?
- Tại sao Hibernate cố gắng cập nhật id loại?
Lỗi nói: Mục nhập trùng lặp '6' cho khóa 'CHÍNH', nhưng có thực sự không? Tôi đảm bảo rằng các id được tăng lên mỗi lần. Và người dùng và các loại được thêm vào cơ sở dữ liệu chính xác.
Tôi đã đăng nhập thông tin và các loại được thêm có id là 7 và id người dùng là 6. Có thể Hibernate lấy user_id là 6 và cố gắng cập nhật các loại và đặt id = 6 trong đó id = 7? Do đó, lỗi khóa chính trùng lặp?
Nhưng tại sao nó lại làm điều gì đó kỳ lạ? Có cách nào để ngăn không cho cập nhật không?
- Tôi có nên đặt id theo cách thủ công không? Nếu không, thì tôi nên thêm các loại như thế nào? Nó cho các lỗi khác khi tôi thêm một đối tượng kiểu chỉ có một chuỗi kiểu trong đó và không có id.
Xin cảm ơn các bạn. Đã nghiền ngẫm nó trong nhiều ngày ...
Bị mắc kẹt với bộ sưu tập của các yếu tố! Cảm ơn! – April