2022-01-30

Spring Data JpaRepository saveAndFlush not working in @Transactional test method

Using JPA Spring Data I have created a couple of entities Ebook and Review, which are linked by a ManyToOne relationship from Review towards Ebook. I have tried to insert a review for an existent ebook, but the result is not being reflected in the database (Postgres DB), even though I am using a saveAndFlush inside a @Transactional. I retrieve inserted review correctly, it is just that is not saving the record in the table.

Entities:

Ebook:

@Entity
public class Ebook {

    @Id
    @SequenceGenerator(
            name="ebook_sequence",
            sequenceName = "ebook_sequence",
            allocationSize = 1
    )
    @GeneratedValue (
            strategy = GenerationType.SEQUENCE,
            generator ="ebook_sequence"
    )
    private Long idEbook;
    private String title;
}

Review:

@Entity
public class Review {
    @Id
    @SequenceGenerator(
            name="sequence_review",
            sequenceName = "sequence_review",
            allocationSize = 1
    )
    @GeneratedValue(
            strategy = GenerationType.SEQUENCE,
            generator = "sequence_review"
    )
    private Long idReview;
    private String reviewText;

    //ManytoOne Ebook
    @ManyToOne(
            cascade = CascadeType.ALL,
            fetch = FetchType.LAZY
    )
    @JoinColumn(
            name = "id_ebook",
            referencedColumnName = "idEbook"
    )
    private Ebook ebook;
}

And the test in which I am trying to insert just a review corresponding to a preexisting ebook record:

    @Test
    @Transactional
    public void saveReviewWithEbook() {

        Ebook ebook = ebookRepository.getById((long)1);

        Review review = Review.builder()
                .reviewText("review text ebook 1")
                .ebook(ebook)
                .build();

        Review reviewInserted = reviewRepository.saveAndFlush(review); //saveAndFlush(review);
        Review reviewLoaded = reviewRepository.getById(reviewInserted.getIdReview());
        System.out.println("reviewLoaded = " + reviewLoaded);
    }

After executing it, there is no record inserted in table 'review', although data appear correctly in variable 'reviewLoaded'. Why is that? How can I save just a review corresponding to an existing ebook?



from Recent Questions - Stack Overflow https://ift.tt/rWbeniC2N
https://bit.ly/3GblJNq

No comments:

Post a Comment