Hibernate - PersistentObjectException: detached entity passed to persist

0

Witam mam problem z dokładaniem asocjacji mięszy tą samą książką a różnymi osobami:

Tworze osobe z polem Set<Książka> książkas, ustawiam @OneToMany

@Entity
public class Osoba {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    Long id;

    @OneToMany(cascade = CascadeType.All)
    Set<Ksiazka> ksiazkas;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Set<Ksiazka> getKsiazkas() {
        return ksiazkas;
    }

    public void setKsiazkas(Set<Ksiazka> ksiazkas) {
        this.ksiazkas = ksiazkas;
    }
}

Tworze książke

@Entity
public class Ksiazka {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    Long id;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }
}

Tworze beana ladującego dane testowe

@Configuration
public class TestData {

    @Autowired
    OsobaRepository osobaRepository;

    @Bean
    public void init(){
        Ksiazka k1 = new Ksiazka();
        Ksiazka k2 = new Ksiazka();
        Osoba o1 = new Osoba();
        o1.setKsiazkas(new HashSet<>());
        o1.getKsiazkas().add(k1);
        o1.getKsiazkas().add(k2);

        osobaRepository.save(o1); // DOTĄD DZIAŁA

        Osoba o2 = new Osoba();
        o2.setKsiazkas(new HashSet<>());
        o2.getKsiazkas().add(k1);
        o2.getKsiazkas().add(k2);

        osobaRepository.save(o2);
    }
}

Przygotowuje repozytorium

public interface OsobaRepository extends JpaRepository<Osoba, Long> {
}

No i main odpalające springa

@SpringBootApplication
public class Application {

    public static void main(String args[]){
        SpringApplication.run(Application.class, args);
    }
}

działa jeśli jedna książka nie jest powiązana z dwoma osobami. Co powinienem zrobić aby móc dopuścić do wielu powiązań

0

@ManyToMany zamiast @OneToMany ?

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