I have one simple issue and i'm not sure why this does not work, i would like someone to explain me what and why i always get Roles fetched when queering Users.

Basically i created User class and i added LazyLoaded list of Roles, but when i execute query i always get Roles, and that is something that i do not want to do. Can someone explain me why that is happening ? 

Basically what i want to achieve is to get Roles when i want, my understanding was, when i in query use LEFT JOIN FETCH with LazyLoad JUST THEN all roles SHOULD be fetched... 

Bellow i added all classes and query that is fetching list of roles, even i did not use LEFT JOIN FETCH in query..

I have simple User class that looks like this:

```
@Entity
@Table(name = "users")
data class User (
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        var id: Long?,

        var sponsorId: Long,

        var firstName: String,

        var lastName: String,

        var photo: String,

        @Column(nullable = false, unique = true)
        var username: String,

        @JsonIgnore
        var password: String,

        @JsonIgnore
        var enabled: Boolean
) {
        @OneToMany(mappedBy = "userId", fetch = FetchType.LAZY)
        var roles: Set<UserRole> = emptySet()
}

```

Also i have second simple class:

```
@Entity
@Table(name = "user_role")
data class UserRole (
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        var id: Long?,

        @JsonIgnore
        var userId: Long?,

        @Enumerated(EnumType.STRING)
        var role: Role
)

```

And in my repository i have this Query, as you can see i did not JOIN FETCHED roles, but anyway i get list of users together with list of roles....

```
@Repository
interface UserRepository : JpaRepository<User, Long> {
    @Query("SELECT u FROM User u WHERE u.sponsorId = :sponsorId")
    fun findAllBySponsorId(@Param("sponsorId") sponsorId: Long): Set<User>

}

```