2011-11-09 16 views
6

Tôi có một thực thể tài liệu được ánh xạ từ nhiều đến một thực thể dự án.

Khi tôi gọi document.getProject, trong trình gỡ lỗi, trong trường dự án của đối tượng tài liệu, tôi thấy điều gì đó về Project$$EnhancerByCGLIB$$67a694bd.

Làm cách nào để truy xuất đối tượng dự án thực tế?

Trả lời

11

Những gì bạn đang thấy là đối tượng Hibernate-Proxy-Object, cho phép ngủ đông làm việc khởi động lười biếng.

Điều đầu tiên cần tự hỏi là, cho dù bạn thực sự muốn truy cập đối tượng gốc. Thông thường bạn nên được tốt hơn off giả vờ proxy là đối tượng thực tế của bạn và để cho ngủ đông làm tất cả các phép thuật.

Nếu vì một lý do nào bạn thực sự cần các đối tượng chính nó (ví dụ như nếu bạn cần loại chính xác), đoạn code sau sẽ làm việc:

if (object instanceof HibernateProxy) { 
    return ((HibernateProxy) object).getHibernateLazyInitializer().getImplementation(); 
} 

Bạn nên biết rằng kết quả của mã abovewritten sẽ cung cấp cho bạn một đối tượng tách rời không còn nằm trong điều khiển ngủ đông, do đó, các thay đổi đối tượng sẽ không được đồng bộ hóa với cơ sở dữ liệu!

+0

cảm ơn bạn đã trả lời. Im thực sự không chắc chắn nếu tôi muốn đối tượng ban đầu. Tôi muốn lấy các giá trị từ các trường của nó. Làm thế nào để tôi giả vờ? Bạn có thể cho tôi lời khuyên không? cảm ơn trước. – bunnyjesse112

+1

Proxy sẽ tải dữ liệu thực tế từ cơ sở dữ liệu khi trường được truy cập thông qua các phương thức truy cập. Vì vậy, về cơ bản có hai cách. Gọi o.getField() trong mã (sau đó bạn có thể thấy giá trị thực tế trong cửa sổ trình gỡ lỗi) hoặc thêm o.getField() vào cửa sổ được xem. Cả hai cách sẽ cung cấp cho bạn dữ liệu thực tế. – Jonathan

+0

Danh sách tài liệu = criteria.list(); MyDocument myDocument = (MyDocument) docs.get (0); String toReturn = null; toReturn = myDocument.getProject(). GetMiddleName(); để trả về là null. tôi đang ở đâu vậy? – bunnyjesse112

1

Tôi đã nhận được thông báo lỗi với chuỗi đó trong đó vì tôi quên thêm dấu ngoặc đơn vào cuộc gọi phương thức. Hãy chắc chắn rằng bạn không có điều này:

document.getProject 

Khi bạn thực sự có ý nghĩa này:

document.getProject() 
+0

Thông báo lỗi nào? –

+0

@LimitedAtonement, một thông báo lỗi có chứa một cái gì đó như 'Project $$ EnhancerByCGLIB $$ 67a694bd', như đã đề cập trong câu hỏi. Đáng tiếc là tôi không nhớ chi tiết của tin nhắn. –

+0

Câu hỏi không nói về lỗi hoặc thông báo lỗi. Có vẻ như người đăng ban đầu đang sử dụng trình gỡ lỗi để điều tra một số giá trị. –

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