2015-03-19 15 views
5

Giả sử bạn có Xe có bộ sưu tập Lốp xe.JPA lưu thực thể "mới" có tham chiếu đến thực thể hiện tại chỉ sử dụng id của nó?

@Entity 
public class Car { 
    private Long id; 
    @OneToMany(mappedBy = "car") 
    private Set<Tire> tires = new HashSet<>(); 
} 

@Entity 
public class Tire { 
    private Long id; 
    ... 
} 

Bây giờ nếu bạn muốn thêm xe mới và thêm Lốp xe hiện có, bạn có thể tìm nạp toàn bộ các thực thể lốp hiện có để đặt bộ xe.

Chỉ có thể có một số ID lốp xe và lưu xe mà không tìm nạp toàn bộ (các) bộ phận của lốp vào bộ nhớ trước? Có cách nào để lưu nó chỉ với một Id lốp nếu nó chỉ là một trường hợp lốp đơn thay vì một bộ? Sử dụng JPA và API tiêu chí, hoặc có thể là JPQL.

+1

Không. Toàn bộ điểm của JPA là đại diện và xử lý các mối quan hệ, vì vậy bạn không thể hack bằng cách sử dụng kiến ​​thức về cách các relatinship thực sự được triển khai trong lớp db của bạn. – Zielu

+0

Bạn có thể sử dụng Biểu đồ thực thể để tìm nạp các đối tượng được điền một phần. – Zielu

+0

Bạn đang sử dụng phiên bản JPA nào? Tôi đã thử nghiệm ở đây với JPA 2.1 và nó không tải tất cả các bộ sưu tập chỉ để thêm một mục vào danh sách. – uaiHebert

Trả lời

9

Bạn có thể sử dụng id để tải đối tượng "phó" proxy, qua EntityManager.getReference. Nó sẽ không phát hành bất kỳ truy vấn DB nào trừ khi bạn truy cập bất kỳ thuộc tính nào của đối tượng.

Nếu bạn truy cập thuộc tính, cơ chế tải chậm sẽ khởi động và tải đối tượng thực. following question giới thiệu giải phẫu của đối tượng proxy. Sử dụng hữu ích để có được hình ảnh tốt hơn

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