2012-08-22 20 views
11

Tôi đang sử dụng Công cụ Hibernate 3.2.1.GA với phiên bản Spring 3.0.2. Tôi đang buộc phải chèn dữ liệu vào trường cơ sở dữ liệu Oracle (10g) loại clob như sau.java.sql.SQLException: hoạt động không được phép: loại luồng không thể được sử dụng theo đợt trong khi chèn dữ liệu vào kiểu dữ liệu dấu kiểm Oracle

Clob c=Hibernate.createClob(request.getParameter("someTextFieldValueOnJSPPage"); 
pojoObj.setSomeClobProperty(c); 

nó hoạt động tốt nhưng khi tôi cố gắng để chèn một dòng dữ liệu bằng CKEditor, demo trên trang JSP của tôi (các ckeditor chỉ đơn giản là làm cho một HTML <textarea></textarea> phần tử) có thể liên quan đến việc định dạng văn bản cũng như hình ảnh, flash vv, nó ném ngoại lệ sau đây.

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.hibernate.exception.GenericJDBCException: could not update: [model.Cms#1] 

org.hibernate.exception.GenericJDBCException: could not update: [model.Cms#1] 

java.sql.SQLException: operation not allowed: streams type cannot be used in batching 

Làm thế nào để giải quyết ngoại lệ đó? Đây có phải là Oracle driver problem hoặc cái gì khác không? Tôi đang sử dụng ojdbc14.jar, Oracle JDBC Driver version - 9.0.2.0.0.


UPDATE:

Một trong những đơn vị có sử dụng các loại Clob

public class Cms implements java.io.Serializable 
{ 
    private BigDecimal cmsId; 
    private Clob aboutUs;  //I'm currently dealing with this property. 
    private Clob contactUs; 
    private Clob privacyPolicy; 
    private Clob returnPolicy; 
    private Clob shippingPolicy; 
    private Clob termsOfUse; 
    private Clob exchangeLinks; 
    private Clob disclaimer; 
    private Clob aboutProducts; 
    private Clob purchasingConditions; 
    private Clob faq; 

    //Parameterized constructor(s) along with the default one as and when needed. 

    //Getters and setters. 
} 

Trong lớp điều khiển Mùa xuân của tôi, tôi đang sử dụng đoạn mã sau để thực hiện chèn vào loại Clob trong Oracle.

Cms c=new Cms(); 
c.setCmsId(new BigDecimal(0)); 
c.setAboutUs(Hibernate.createClob(request.getParameter("txtAboutUs"))); 
session.save(c); 
session.flush(); 
session.getTransaction().commit(); 
model.put("status", "1"); 
model.put("msg","Insertion done successfully."); 
//setParameter(cb); 

đâu model chỉ đơn giản là một Map model, một tham số chính thức của submit() phương thức trong lớp điều khiển mùa xuân mà được gọi khi một nút gửi được nhấp trên trang JSP.


Tôi lấy dữ liệu bằng cách sử dụng phương pháp đơn giản sau đây trong lớp điều khiển Xuân

private void getData(Map model) 
{ 
    Session session=NewHibernateUtil.getSessionFactory().getCurrentSession(); 
    session.beginTransaction(); 
    List<Cms>list=session.createQuery("from Cms order by cmsId desc").list(); 
    model.put("list", list); 

    session.flush(); 
    session.getTransaction().commit(); 
} 

Cố gắng để làm như đã đề cập here nhưng không có kết quả (Tôi đang phải đối mặt với các ngoại lệ tương tự như quy định tại câu hỏi đó).

+0

Nó thực sự là vấn đề trình điều khiển Oracle. Tôi đang sử dụng phiên bản Oracle JDBC Driver - 9.0.2.0.0'. Tôi vừa tải xuống một phiên bản mới từ [tại đây] (http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-10201-088211.html) là phiên bản Trình điều khiển Oracle JDBC - 10.2.0.5. 0' hoạt động tốt trong mọi tình huống. – Tiny

+6

Bạn nên đăng câu trả lời đó và đánh dấu nó. – pickypg

+4

@Tiny Trả lời câu hỏi của riêng bạn và sau đó đánh dấu câu trả lời. Cảm ơn bạn. –

Trả lời

18

Trường hợp ngoại lệ được ném như đã đề cập trong câu hỏi là do thực tế là phiên bản cũ hơn của trình điều khiển Oracle có vẻ không hoạt động với kiểu dữ liệu của kho tàng Oracle. Tôi đã sử dụng Oracle JDBC Driver version - 9.0.2.0.0. Tôi đã tải xuống phiên bản mới từ hereOracle JDBC Driver version - 10.2.0.5.0 hoạt động tốt cho ứng dụng của tôi trong tất cả các trường hợp.

Một nơi nào đó trên internet, dữ liệu được lưu trữ bởi CKEditor được chuyển đổi (mã hóa) thành base64 trong khi chèn vào kho dữ liệu Oracle, cách tiếp cận sẽ hoạt động mà không cần cập nhật trình điều khiển (có nghĩa là phiên bản cũ hơn của các trình điều khiển Oracle) (đó là rõ ràng đòi hỏi phải giải mã từ base64 trong khi lấy dữ liệu từ cơ sở dữ liệu).

nhưng tôi thực sự không đưa nó vào thực tế vì phiên bản mới của trình điều khiển tôi tải xuống đang hoạt động tốt cho tôi. Vì vậy, tôi không chắc chắn về cách tiếp cận sau và tôi để nó cho độc giả.

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