Filtrowanie Specification + FetchMode.SUBSELECT

0

Mam takie zapytanie w jpa:

	public Page<User> getUsersWithAdsresses(Pageable pageable) {
		Specification<User> spec = builder.build(); // tylko przykład, że przekazujemy specyfikacje
        return userRepository.findAll(spec, pageable);
	}

W encji User mam relacje:

 	@ManyToMany
	@JoinTable(name = "user_to_address", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "address_id"))
	private Set<Address> addresses;

Encja Address:

public class Address {

	@Id
	private Long id;

	@Column(nullable = false, unique = true)
	private String name;
 }

Chciałbym mieć taką sytuacje, że chce przefiltrować usera po nazwie ulicy(w specyfikacji podaje warunek filtra), ale w api zwrócić wszystkie jego ulice.
Chodzi o to, że jak teraz filtruje to zwraca mi tylko tą jedną ulice(adres) po której było filtrowane, a chciałbym widzieć wszystkie adresy pod których mieszka ten user.

Myślałem aby użyć @Fetch(FetchMode.SUBSELECT) nad Set<Address> addresses w encji User lub subselecta na encji, ale jakoś mi to nie wychodzi

0

To może inaczej,

a gdybym dodałbym encje pośredniczącą? Czyli miałbym:

public class User {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private int id;

	@OneToMany(mappedBy = "user")
	private Set<UserToAddress> addresses;
 
    // pozostałe pola
}
public class UserToAddress {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private int id;

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "user_id", nullable = false)
	private User user;

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "address_id", nullable = false)
	private Address address;
}
public class Address {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private int id;

    @Column(nullable = false)
	private String name;

}

Tutaj pytanie, ułatwi mi to abym jednym zapytaniem przefiltrował użytkowników po nazwie ulicy, ale jednocześnie w api zwrócił wszystkie adresy pod którymi mieszka dany użytkownik?

Nie wiem jak mam to zrobić, oczywiście moge się odwołać drugi raz do bazy i ściągnąć wszystkie adresy usera ale pytanie czy można to zrobić lepiej

1 użytkowników online, w tym zalogowanych: 0, gości: 1