2015-01-28 16 views
11

Tôi đang làm việc trên một ứng dụng Spring JPA, sử dụng MySQL làm cơ sở dữ liệu. Tôi đảm bảo rằng tất cả thư viện spring-jpa, hibernate và mysql-connector-java được tải.Không có ánh xạ đối tượng cho loại JDBC: 1111

Tôi đang chạy phiên bản mysql 5. Dưới đây là một đoạn trích của tập tin application.properties tôi:

spring.jpa.show-sql=false 
spring.jpa.hibernate.ddl-auto=create-drop 
spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect 

spring.datasource.url=jdbc:mysql://localhost/mydatabase 
spring.datasource.username=myuser 
spring.datasource.password=SUPERSECRET 
spring.datasource.driverClassName=com.mysql.jdbc.Driver 

Khi thực hiện một thử nghiệm hội nhập, mùa xuân startsup đúng nhưng không thành công trên tạo SessionFactory ngủ đông, với ngoại lệ:

org.hibernate.MappingException: No Dialect mapping for JDBC type: 1111 

Tôi nghĩ tiếng địa phương của tôi nên được Mysql5Dialect, tôi cũng đã thử một cách rõ ràng nêu InnoDB, và hai phương ngữ tùy chọn mà không chỉ ra phiên bản 5. Nhưng tôi luôn luôn kết thúc với cùng một 'Không có bản đồ Dialect cho JDBC loại: 1111' tin nhắn. Tệp application.properties của tôi nằm trong thư mục nguồn thử nghiệm/tài nguyên. Nó được công nhận bởi JUnit Test runner (trước đây tôi đã có ngoại lệ vì lỗi đánh máy trong đó).

Thuộc tính tôi đang đặt sai? Tôi không thể tìm thấy một số tài liệu chính thức về các tên thuộc tính này nhưng đã tìm thấy gợi ý trong câu trả lời xếp chồng này: https://stackoverflow.com/a/25941616/1735497

Mong chờ câu trả lời của bạn!

BTW Ứng dụng đang sử dụng khởi động mùa xuân.

+0

Thông báo lỗi có nghĩa là một cột trả về dữ liệu trong một kiểu không thể ánh xạ.'Không có ánh xạ đối tượng cho kiểu JDBC: 1111' chỉ ra java.sql.Types.OTHER'. Bạn chọn loại cột nào từ bảng? – SubOptimal

+0

Ồ, cảm ơn. Tôi nghĩ điều này có nghĩa là loại phương ngữ ... Tôi thích sử dụng UUID làm ID và trước đây chúng tôi luôn làm việc với postgres, có loại cột UUID. Vì vậy, chúng tôi chỉ có thể nói @Type (type = "pg-uuid"); Tôi không nghĩ rằng mysql có một loại cột UUID mặc dù – SakeSushiBig

+0

Chỉ cần phát hiện ra nó rất giống với postgres: áp dụng chú thích @Type (type = "uuid-char") cho thuộc tính id. – SakeSushiBig

Trả lời

10

Dưới đây là câu trả lời dựa trên những nhận xét từ tối ưu:

Các thông báo lỗi thực sự nói rằng một loại cột không thể được ánh xạ tới một loại cơ sở dữ liệu bằng hibernate. Trong trường hợp của tôi, nó là loại java.util.UUID tôi sử dụng làm khóa chính trong một số thực thể của mình. Chỉ cần áp dụng chú thích @Type(type="uuid-char") (đối với postgres @Type(type="pg-uuid"))

+0

Nếu bạn nhận ngoại lệ chỉ trong môi trường thử nghiệm trên HSQLDB - hãy xem http://stackoverflow.com/questions/1007176/using-different-hibernate-user-types-in-different-situations – Lu55

+0

Tôi đồng ý với Lu55. Bạn không nên thêm chú thích @Type cho đến khi nó thực sự cần thiết. Nhưng tôi không thực sự đồng ý với các giải pháp được cung cấp trong vấn đề được liên kết (có thể chúng quá cũ?). Vì vậy, tôi tạo một bài đăng với giải pháp của riêng mình: http://stackoverflow.com/questions/1007176/using-different-hibernate-user-types-in-different-situations/40828806#40828806 – Tim

+0

Hoặc cách khác trong chuỗi truy vấn của bạn, bạn có thể cũng làm một Casting để Varchar như vậy: CAST (table_name.column_name như VARCHAR) AS table_name –

6

Ngoài ra còn có một trường hợp sử dụng phổ biến khác ném ngoại lệ này. Chức năng gọi trả về void. Để biết thêm thông tin và giải pháp, hãy truy cập here.

3

Thỉnh thoảng khi bạn gọi thủ tục/chức năng sql, có thể cần phải trả lại thứ gì đó. Bạn có thể thử trở về void: RETURN; hoặc chuỗi (một này làm việc cho tôi): RETURN 'OK'

4

hãy Kiểm tra xem một số cột trở lại nhiều có unknow Loại trong truy vấn.

ví dụ: '1' như column_name thể có kiểu không rõ

1 như column_name là Integer là đúng One.

Điều này phù hợp với tôi.

+1

Tôi đã có một truy vấn riêng với một SqlResultMapping của riêng tôi và đây là vấn đề, cố định nó bằng cách thêm một diễn viên vào truy vấn '' CAST ('staticstring' AS varchar (50)) dưới dạng columnmappingname – dwana

0

Đối với bất cứ ai nhận được lỗi này với một chế độ ngủ đông cũ (3.x) phiên bản:

không viết kiểu trả về bằng chữ in hoa. bản đồ thực hiện kiểu ngủ đông sử dụng các kiểu trả về chữ thường và không chuyển đổi chúng:

CREATE OR REPLACE FUNCTION do_something(param varchar) 
    RETURNS integer AS 
$BODY$ 
... 
Các vấn đề liên quan