2012-02-27 26 views
5

Trong khi làm việc trên ứng dụng đầu tiên của tôi trong Hibernate. Trong khi cố gắng để lấy một đối tượng người dùng từ DB tôi đang nhận được ngoại lệ sau đây:TypeMismatchException ID được cung cấp có kiểu sai

org.hibernate.TypeMismatchException: Cung cấp id của các loại sai cho lớp org.cw.form.User. Dự kiến: lớp java.lang.Integer, có lớp java.lang.String tại org.hibernate.event.def.DefaultLoadEventListener.onLoad (DefaultLoadEventListener.java:109) tại org.hibernate.impl.SessionImpl.fireLoad (SessionImpl java: 906) tại org.hibernate.impl.SessionImpl.load (SessionImpl.java:823) tại org.hibernate.impl.SessionImpl.load (SessionImpl.java:816)

tôi đã tạo bảng USERS với postgreSQL sau:

TẠO SEQUENCE user2_id_seq; TẠO TABLE NGƯỜI SỬ DỤNG (id số nguyên KHÔNG NULL DEFAULT nextval ('user2_id_seq'), user_name varchar (45) NOT NULL UNIQUE, mật khẩu varchar (45) NOT NULL, email varchar (45) NOT NULL, PRIMARY KEY (id)) ;

Và thực thể tài khoản được định nghĩa như vậy:

@Entity @Table (name = "USERS") public class tài khoản {

@Id 
@Column(name="ID") 
@GeneratedValue(strategy= GenerationType.IDENTITY) 
private Integer id; 

@Column(name="USER_NAME", unique = true) 
private String userName; 

@Column(name="PASSWORD") 
private String password; 

@Column(name="EMAIL") 
private String email; .. all the getters and setters... 

tôi am i thiếu một cái gì đó ?

Trả lời

5

Sẽ dễ dàng hơn nếu bạn trả lời nếu bạn cho biết cách bạn truy xuất Người dùng. Dựa vào thông điệp:

Provided id of the wrong type for class org.cw.form.User. 
Expected: class java.lang.Integer, got class java.lang.String 

Tôi đoán bạn đang cung cấp chuỗi thay vì đúng loại (Integer):

String userID = "1"; //Should be Integer userID = 1 instead 
session.get(User.class, userID); 
+0

Hey nó đã hoạt động. cảm ơn. – special0ne

2

tôi không thực sự biết nếu nó sẽ giải quyết vấn đề của bạn, nhưng kể từ khi bạn đang sử dụng trình tự để tạo id ở phía db, tôi nghĩ rằng bạn nên sử dụng một máy phát điện tự:

@Id 
@Column(name="ID") 
@GeneratedValue(strategy= GenerationType.SEQUENCE, generator="user2_id_seq") 
private Integer id; 

Xin xem bài đăng này để biết chi tiết: Hibernate sequence on oracle, @GeneratedValue(strategy = GenerationType.AUTO)

2
public User findClientByUsername(String login) {   
     Criteria criteria = sessionFactory.getCurrentSession().createCriteria(User.class); 
     criteria.add(Restrictions.like("userName", login)); 
     return (User) criteria.uniqueResult(); 
    } 

Giải pháp của vấn đề của bạn.

1

Tôi đã có một thủ phạm khác nhau khi tạo sự cố này: Tôi đã sao chép một kho lưu trữ của một tổ chức khác đã sử dụng Chuỗi làm loại khóa chính.

Vì vậy, tôi đã

class MyEntity implements Serializable { 

    @Id 
    Integer id 

kết hợp với

interface MyEntityRepository extends CrudRepository<MyEntity, String> { 

mà được sản xuất thông báo lỗi.

Chỉ cần thay đổi loại giao diện từ Chuỗi thành Số nguyên đã giải quyết vấn đề cho tôi.

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