Beim Testen des CRUD-Repositorys wird eine Fehlermeldung mit der Testmethode save() angezeigtJava

Java-Forum
Guest
 Beim Testen des CRUD-Repositorys wird eine Fehlermeldung mit der Testmethode save() angezeigt

Post by Guest »

Ich versuche, einige Tests für mein Repository zu schreiben. Für die Testmethode „Speichern“ erhalte ich diese Fehlermeldung:
org.springframework.orm.ObjectOptimisticLockingFailureException: Zeile wurde durch eine andere Transaktion aktualisiert oder
gelöscht (oder die Zuordnung nicht gespeicherter Werte war falsch). ):
[ru.clevertec.newsonline.entity.News#7289c37a-8bfa-4092-872b-f1e4a8c319c6]
Andere Methoden bestehen die Tests. Warum habe ich diesen Fehler erhalten?

Code: Select all

org.springframework.orm.ObjectOptimisticLockingFailureException: Row was updated or deleted by
another transaction (or unsaved-value mapping was incorrect):
[ru.clevertec.newsonline.entity.News#7289c37a-8bfa-4092-872b-f1e4a8c319c6]

Code: Select all

@Repository
public interface NewsRepository extends JpaRepository, IRepository, IFilterEntityRepository {

}

Code: Select all

public interface IRepository {

List findAll();

Page findAll(Pageable pageable);

Optional findById(UUID id);

E save(E e);

void delete(E e);

}

Code: Select all

@DataJpaTest
@ActiveProfiles("test")
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
class NewsRepositoryIT {
@Test
public void shouldSaveNews() {
//given
News newNews = NewsTestBuilder.builder().build().buildNewsForSave();
//when
newsRepository.save(newNews);
//then
assertEquals(21, newsRepository.findAll().size());
assertTrue(((CrudRepository) newsRepository).findById(newNews.getNewsId()).isPresent());
}

Code: Select all

    @ToString(exclude = {"pictures", "comments"})
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Entity
@Table(name = "news", schema = "news_online")
public class News {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "news_id")
private UUID newsId;
@Column(name = "header_news")
private String headerNews;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "author_id")
private Author author;
@Column(name = "date_of_news", updatable = false)
@ColumnDefault(value = "CURRENT_TIMESTAMP")
private LocalDateTime dateOfNews;
@Column(name = "is_published")
private boolean isPublished;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "category_id")
private Category category;
@Column(name = "short_description", length = 500)
private String shortDescription;
@Column(name = "content_link")
private String contentLink;
@ManyToMany(mappedBy = "news", cascade = CascadeType.ALL)
@Fetch(value = FetchMode.SUBSELECT)
private List pictures;
@OneToMany(mappedBy = "news", cascade = CascadeType.ALL, orphanRemoval = true)
@Fetch(value = FetchMode.SUBSELECT)
private List comments;

public void addPicture(Picture picture) {
List news = picture.getNews();
news.add(this);
picture.setNews(news);
pictures.add(picture);
}

public void addComment(Comment comment) {
comment.setNews(this);
comments.add(comment);
}

}
Code der Util-Klasse NewsTestBuilder hinzufügen

Code: Select all


@public News buildNewsForSave() {
return News.builder().newsId(UUID.fromString("7289c37a-8bfa-4092-872b-f1e4a8c319c6")).headerNews("Breaking news")
.isPublished(true).category(Category.builder().categoryId(UUID.fromString("3de78717-14f5-491e-a375-e122ec4dcbe2")).section(Section.CAR).build())
.shortDescription("Text").contentLink("static/text/news100.txt").build();
}

Ich habe auch versucht, @Commit für die Testmethode zu verwenden. Ich hatte damit gerechnet, dass es vorübergehen würde, aber es hat mir nicht geholfen.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post