Tôi có cấu trúc thực thể sau: Kinh doanh -> Chiến dịch -> Quảng cáo, trong đó MỘT doanh nghiệp có thể có nhiều chiến dịch và một chiến dịch có thể có nhiều khuyến mãi. Cả hai quan hệ một-nhiều được tuyên bố là LAZY. Một nơi trong mã của tôi, tôi cần phải háo hức lấy cả bộ sưu tập từ một doanh nghiệp, vì vậy tôi làm:JPA: hãy giúp hiểu "tham gia tìm nạp"
Query query = entityManager.createQuery("select b from Business b " +
"left join fetch b.campaigns c " +
"left join fetch c.promotions where b.id=:id");
query.setParameter("id", b.getId());
business = (Business) query.getResultList().get(0);
Tuy nhiên, truy vấn trả về một danh sách kết quả có chứa 4 đối tượng kinh doanh trong đó, tất cả 4 đối tượng được đề cập đến cùng một cá thể nghiệp vụ. Trong cơ sở dữ liệu của tôi, doanh nghiệp này có 3 chiến dịch trong đó và tất cả 3 chiến dịch đều có 3 quảng cáo theo họ.
Tôi có hai câu hỏi:
Lúc đầu, tôi sử dụng Danh sách để chứa nhiều khía cạnh của mối quan hệ, nhưng khi chương trình chạy, tôi nhận được "org.hibernate.HibernateException: không thể đồng thời lấy nhiều túi " ngoại lệ. Sau đó, tôi googled ngoại lệ này và có vẻ như tôi phải sử dụng Set, thay vì List. Vì vậy, tôi đã thay đổi bộ sưu tập thành Set và nó hoạt động. Ai đó có thể cho tôi biết tại sao Danh sách sẽ không hoạt động trong tình huống này?
Tôi hy vọng truy vấn trả về một kết quả duy nhất, bởi vì nó truy vấn đối với id, là khóa chính và do đó chỉ nên trả về một kết quả. Nhưng nó chỉ ra rằng nó trả về 4 trường hợp trong một danh sách. Đây co phải vân đê? Hoặc là hành vi mong đợi này?
Mọi trợ giúp sẽ được đánh giá cao.
Thêm "khác biệt" vào truy vấn đã thực hiện thủ thuật. Cảm ơn. –