Why you are getting duplicates is impossible to diagnose without knowing your relationships.
You could add
after you are done setting your restrictions. Be aware you will still contain all the duplicates in your result set, this does not reduce the amount of data fetched from the DB or what is sent over the wire. The removing of duplicates is handled on the
java side.
Alternatively you can use projections. If you go that route be aware you have to specify all the property's you want fetched.