简体   繁体   中英

hibernate join fetch dump result

I am new to the hibernate. Can some one explain why the first query gets the dump results? thanks!

shop entity

....
@OneToMany(mappedBy = "shop")
private Collection<Product> productCollection;
....

product entity

....
 @JoinColumn(name = "shopId", referencedColumnName = "id")
@ManyToOne
private Shop shop;
....

query1 result

from Shop s left join fetch s.productCollection

shop1 : product1 product2 product3 product4 product5 product6 product7 product8 product9 product10 product11 
shop1 : product1 product2 product3 product4 product5 product6 product7 product8 product9 product10 product11 
shop1 : product1 product2 product3 product4 product5 product6 product7 product8 product9 product10 product11 
shop1 : product1 product2 product3 product4 product5 product6 product7 product8 product9 product10 product11 
shop1 : product1 product2 product3 product4 product5 product6 product7 product8 product9 product10 product11 
shop1 : product1 product2 product3 product4 product5 product6 product7 product8 product9 product10 product11 
shop1 : product1 product2 product3 product4 product5 product6 product7 product8 product9 product10 product11 
shop1 : product1 product2 product3 product4 product5 product6 product7 product8 product9 product10 product11 
shop1 : product1 product2 product3 product4 product5 product6 product7 product8 product9 product10 product11 
shop1 : product1 product2 product3 product4 product5 product6 product7 product8 product9 product10 product11 
shop1 : product1 product2 product3 product4 product5 product6 product7 product8 product9 product10 product11 
shop2 : product12 

query2 result

from Product p right join fetch p.shop

 product1 : shop1
product2 : shop1
product3 : shop1
product4 : shop1
product5 : shop1
product6 : shop1
product7 : shop1
product8 : shop1
product9 : shop1
product10 : shop1
product11 : shop1
product12 : shop2

ps. if you need more information, please let me know.

Use natural join instead of left outer join. This is happening because you have shop1 in multiple products. For every product it will try to join with shop1.

Edit 1: Another JPA provider( hibernate ) specific solution is using private Set<Product> productCollection; instead of private Collection<Product> productCollection; That will fetch unique result.

Hope it works.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM