2011-07-19 34 views
5

Tôi đang sử dụng postgres v8.3 có loại columntype là XML. DDL trông như thế này:org.hibernate.MappingException: Không có ánh xạ đối tượng cho loại JDBC: 1111

CREATE TABLE contact (
"ID" INTEGER NOT NULL , 
"NAME" VARCHAR NOT NULL, 
"Details" XML , ...... 

Trong tập tin bản đồ hbm.xml Tôi đồ nó như thế này:

<key-property name="Details" type="java.lang.String" > 
<column name="Details" /> 
</key-property> 

và tôi đoán đây là lý do của lỗi: Không có ánh xạ Dialect cho JDBC loại: 1111 khi tôi chạy một truy vấn lựa chọn sử dụng:

List<?> contactList= session.createSQLQuery("select * from contact where id=" + val.getId() + " and name= '" + val.getName + "'").list(); 

nhưng cách khác tôi có thể lập bản đồ "XML" loại đến một datatype java là gì?

+0

câu trả lời nIKUNJ là đúng, nó cố định vấn đề đối với tôi. Tôi gặp vấn đề này trong khi nâng cấp từ mùa xuân 2.x lên mùa xuân 3. Không chắc chắn lý do tại sao ánh xạ chuỗi không phù hợp với cột xml đã làm việc trước đó, nhưng việc nâng cấp chắc chắn bắt đầu gây ra: org.hibernate.exception.SQLGrammarException: Không thể thực thi cập nhật hàng loạt JDBC – depsypher

Trả lời

0

Hãy thử xác định phương ngữ kết nối "hibernate.dialect" trong hibernate.cfg.xml cho postgres.

+0

Tôi đã thử điều đó, nhưng nó vẫn hiển thị cùng một Lỗi. – lakshmi

2

Bạn phải chỉ định loại cột tùy chỉnh của mình bằng cách sử dụng lớp org.hibernate.usertype.UserType do hibernate cung cấp.

Here là ví dụ rất hay.

Cảm ơn.

+0

Trong ví dụ đó, Hibernate biết làm thế nào để * tạo * một cột XML? Phương thức 'sqlTypes()' trả về '{Types.VARCHAR}' – z0r

1

Use addScalar();

Ví dụ

session.createSQLQuery("select public.flcpool_backup()") 
            .addScalar("id", Hibernate.BIG_INTEGER) 
            .addScalar("caf_tbl_id", Hibernate.BIG_INTEGER) 
            .executeUpdate(); 
Các vấn đề liên quan