Spring Boot kann nicht in der Lage sein, Entität mit vielen bis zu vielen Beziehung zum Join Table zu rettenJava

Java-Forum
Anonymous
 Spring Boot kann nicht in der Lage sein, Entität mit vielen bis zu vielen Beziehung zum Join Table zu retten

Post by Anonymous »

Ich versuche eine Anwendung zu treffen, bei der der Benutzer auf Post reagieren kann, und ich habe Probleme mit der Beziehung zwischen den Nachrichten (Posts) und Reaktionen. Wenn ich versuche, auf einen Beitrag zu reagieren, gibt es mir einen Stackoverflowerror < /p>
News.java

Code: Select all

@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>
reactions.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>
Reactionsdto.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-Route, um auf einen Newscontroller.java < /p>
 zu reagieren, um zu reagieren.    @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]

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post