Spring+hibernate @manyToMany @repository

0

Nauka Spring+hibernate. Aplikacja webowa

Ucze się z video Tutoriali ale czasem mam wrazenie ze nie wszystko rozumiem. W tym przypatku nie rozumiem działania repository :)
Chce pokazac w „user/{id}” blogi należące do usera.

Najpierw Kod z tutoriala dziala ladnie :)

**entity**
**User**

@OneToMany(mappedBy = "user")
	private List<Blog> blogs;

**Blog**

@ManyToOne
@JoinColumn(name = "user_id")
private User user;

**Controler**

@RequestMapping("user/{id}")
	public String detail(Model model, @PathVariable int id) {
		model.addAttribute("user", userService.findOneWithBlogs(id));
		return "usersInfo";
	}

**Service**

public User findOne(int id){
		return userRepository.findOne(id);
	}

@Transactional
	public User findOneWithBlogs(int id) {
		User user = findOne(id);
		List<Blog> blogs = blogRepository.findByUser(user);
		user.setBlogs(blogs);
		return user;
	}

**blogRepository**
public interface BlogRepository extends JpaRepository<Blog, Integer> {

	List<Blog> findByUser(User user);

}

Powyszy przypadek działa pięknie w przypatku relacji @OneToMany

Ale wymarzyło mi sie ze wiele blogow bedzie nalezalo do wielu uzytkowników. Troche improwizuje.

Zmieniam entity User

@ManyToMany
@JoinTable
private List<User>users;

Zmieniam entity Blog

@ManyToMany(mappedBy = "users")
private List<Blog> blogs;

Sadze ze powinienem zmienic findByUser w blogRepository ale nie bardzo rozumiem jak to dziala.

Jak byscie mogli mi zasugerować materialy w których znajde rozwiązanie bym był wdzięczny :D

0

Z własnego doświadczenia wiem, że takie zapętlone odwołania user > lista blogów > blog > lista userów > user ... raczej nie są dobrym pomysłem. Przy generowaniu hashCode(), toString() czy pobieraniu danych w przypadku REST-a wyrzuca StackOverflowError. Ale też dopiero się uczę i istnieje duże prawdopodobieństwo że to ja coś robiłem źle :P

List<Blog> findByUser(User user); w interfejsie BlogRepository jest dobre, jeżeli chcesz pobrać listę wszystkich blogów pisanych przez konkretnego użytkownika. Jeżeli chciałbyś pobrać tylko jednego bloga, prowadzonego przez konkretnego użytkownika to musiałbyś zamienić List<Blog> na Blog. Po findBy wpisujesz według czego JpaRepository ma szkukać.

Ja się uczyłem z książki "Spring w Akcji IV" -polecam. A z ogólnodostępnych w sieci to dokumentacja http://docs.spring.io/spring-data/jpa/docs/current/reference/html/ ewentualnie zawsze jest Google na uzupełnienie: https://www.google.pl/search?q=jpa+repository+find+by :)

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