2015-03-15 14 views
5

Vấn đề là như sau:cửa hàng JPA thực thể có được đối tượng id lĩnh vực thay vì đối tượng chính nó

Chúng tôi có tổ chức:

@Entity 
public class Feedback { 
    @Id 
    @GeneratedValue(generator="token") 
    private String id; 

    @ManyToOne 
    private Product product; 

    private String message; 

    // other fields 
} 

Và chúng tôi có một thiết bị đầu cuối máy chủ, tiếp nhận thông tin phản hồi từ khách hàng. Phản hồi nhận được ở định dạng multipart/form-based, với các lĩnh vực:

ProductId - product identifier 
Message - feedback message 
Some other fields 

Để thiết Feedback.product chúng ta cần phải nạp đối tượng sản phẩm từ JPA - điều này có thể tốn nhiều thời gian và nó tạo ra các truy vấn không cần thiết.

Có thể lưu trữ thực thể, nhưng chuyển id sản phẩm thay vì đối tượng sản phẩm không? Chúng tôi cần một số cách để sửa đổi truy vấn INSERT.

Chúng tôi sử dụng EclipseLink JPA với Spring và Vaadin.

Trả lời

6

Sử dụng EntityManager.getReference(): nếu thực thể chưa được tải, nó chỉ đơn giản là tạo proxy được khởi tạo lười biếng xung quanh ID mà không làm cho bất kỳ truy vấn SQL nào được thực hiện.

+0

Cảm ơn bạn. Làm cách nào để kiểm tra xem thực thể có tồn tại không? Hoặc để buộc getReference ném một ngoại lệ, nếu không có thực thể nào với id đó? –

+0

Sử dụng tìm. Nhưng sau đó bạn sẽ có một truy vấn, mà bạn muốn tránh. –

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