Я пытаюсь сделать приложение, в котором пользователь может отреагировать, и у меня возникли проблемы с отношениями между новостями (посты) и реакциями. Когда я пытаюсь отреагировать на сообщение, это дает мне stackoverflowerror < /p>
news.java
@Data
@Entity
@Table(name = "News")
public class News {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "update_type")
private String updateType;
@Column(name = "created_at")
private Date createdAt;
private String title;
private String intro;
@Column(name = "thumbnail_url")
private String thumbnailUrl;
@Column(name = "image_url")
private String imageUrl;
private String description;
@Column(name = "news_id")
private Long newsId;
private int snaps;
private String location;
@JsonManagedReference
@OneToMany(mappedBy="news", cascade = CascadeType.ALL)
Set newsReactions;
public boolean hasReaction(String reactionName) {
return newsReactions.stream()
.map(newsReaction -> newsReaction.getReactions().getName())
.anyMatch(name -> name.toLowerCase().contains(reactionName));
}
public void addNewReaction(Reactions reactions) {
newsReactions.add(new NewsReactions(this, reactions));
}
public void addReaction(Reactions reactions) {
List newsReactionsList = newsReactions.stream()
.filter(nr -> nr.getReactions().getName().toLowerCase().contains(reactions.getName()))
.toList();
if(!newsReactionsList.isEmpty()) {
newsReactionsList.getFirst().count++;
} else {
addNewReaction(reactions);
}
}
< /code>
reections.java
@NoArgsConstructor
@Data
@Entity
@Table(name = "Reactions")
public class Reactions {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "reaction_id")
private Long id;
private String name;
@JsonIgnore
@OneToMany(mappedBy="reactions", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
Set newsReactions;
}
< /code>
reectionsdto.java
@Data
public class ReactionsDto {
String name;
}
< /code>
newsreactions.java
@Data
@Entity
@NoArgsConstructor
public class NewsReactions {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long id;
@ToString.Exclude
@JsonBackReference
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="news_id")
News news;
@ToString.Exclude
@JsonIgnore
@ManyToOne
@JoinColumn(name="reactions_id")
Reactions reactions;
@Column
int count;
public NewsReactions(News news, Reactions reactions) {
this.news = news;
this.reactions = reactions;
count = 1;
}
< /code>
API-маршрут для реагирования на новости NewsController.java < /p>
@PutMapping("/news/{id}/reactions")
public ResponseEntity reactToNews(@PathVariable("id") Long id, @RequestBody ReactionsDto reactionsDto) throws ReactionsNotFoundException, NewsNotFoundException {
News news = newsService.getById(id).orElse(null);
if(news != null) {
Reactions reactions = reactionsService.getByName(reactionsDto.getName()).orElse(null);
if(reactions != null) {
news.addReaction(reactions);
newsService.save(news);
return ResponseEntity
.created(URI.create("/news/"+reactions.getId()+"/reactions"))
.body(reactions);
}
throw new ReactionsNotFoundException("Reaction not found");
}
throw new NewsNotFoundException("Couldn't find the news");
}
< /code>
Stack Trace < /p>
2025-03-10T15:02:08.101+01:00 ERROR 95629 --- [apiwyldernews] [nio-3000-exec-6] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: java.lang.RuntimeException: java.lang.StackOverflowError] with root cause
java.lang.StackOverflowError: null
at java.base/java.lang.Long.hashCode(Long.java:1440) ~[na:na]
at java.base/java.lang.Long.hashCode(Long.java:1428) ~[na:na]
at com.cloakstudio.apiwyldernews.model.News.hashCode(News.java:13) ~[classes/:na]
at com.cloakstudio.apiwyldernews.model.NewsReactions.hashCode(NewsReactions.java:10) ~[classes/:na]
at java.base/java.util.AbstractSet.hashCode(AbstractSet.java:124) ~[na:na]
at org.hibernate.collection.spi.PersistentSet.hashCode(PersistentSet.java:410) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
at com.cloakstudio.apiwyldernews.model.News.hashCode(News.java:13) ~[classes/:na]
at com.cloakstudio.apiwyldernews.model.NewsReactions.hashCode(NewsReactions.java:10) ~[classes/:na]
at java.base/java.util.AbstractSet.hashCode(AbstractSet.java:124) ~[na:na]
at org.hibernate.collection.spi.PersistentSet.hashCode(PersistentSet.java:410) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
at com.cloakstudio.apiwyldernews.model.News.hashCode(News.java:13) ~[classes/:na]
at com.cloakstudio.apiwyldernews.model.NewsReactions.hashCode(NewsReactions.java:10) ~[classes/:na]
at java.base/java.util.AbstractSet.hashCode(AbstractSet.java:124) ~[na:na]
at org.hibernate.collection.spi.PersistentSet.hashCode(PersistentSet.java:410) ~[hibernate-core-6.6.8.Final.jar:6.6.8.Final]
Подробнее здесь: https://stackoverflow.com/questions/794 ... join-table
Spring Boot не может спасти сущность со многими ко многим отношениям с таблицей Join Table ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Spring Boot не может спасти сущность со многими ко многим отношениям с таблицей Join Table
Anonymous » » в форуме JAVA - 0 Ответы
- 14 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Spring Boot не может спасти сущность со многими ко многим отношениям с таблицей Join Table
Anonymous » » в форуме JAVA - 0 Ответы
- 16 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Spring Boot не может спасти сущность со многими ко многим отношениям с таблицей Join Table
Anonymous » » в форуме JAVA - 0 Ответы
- 19 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как объединить панды DataFrames с многими ко многим отношениям, избегая столкновений?
Anonymous » » в форуме Python - 0 Ответы
- 18 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как объединить панды DataFrames с многими ко многим отношениям, избегая столкновений?
Anonymous » » в форуме Python - 0 Ответы
- 14 Просмотры
-
Последнее сообщение Anonymous
-