【发布时间】:2022-01-28 08:18:21
【问题描述】:
在我的项目中,两个类 Book 和 Story 作为 OneToMany 关系我只想在 Story 类中插入记录我有这个逻辑
//service class
public Story saveStoryBook(int id, Story story) {
Story stry=new Story();
stry.setStoryName(story.getStoryName());
Book book= bookRepository.findById(id).get();
log.info(book);
book.addStory(stry);
stry.setBook(book);
log.info(stry);
Story s= storyRepository.save(stry);
log.info(s);
return s;
}
然后使用邮递员运行此代码,我收到 500 错误并在命令提示符中显示
2021-12-30 10:19:05 - Initializing Spring DispatcherServlet 'dispatcherServlet'
2021-12-30 10:19:05 - Initializing Servlet 'dispatcherServlet'
2021-12-30 10:19:05 - Detected StandardServletMultipartResolver
2021-12-30 10:19:05 - Detected AcceptHeaderLocaleResolver
2021-12-30 10:19:05 - Detected FixedThemeResolver
2021-12-30 10:19:05 - Detected org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator@25110bb9
2021-12-30 10:19:05 - Detected org.springframework.web.servlet.support.SessionFlashMapManager@7d49a1a0
2021-12-30 10:19:05 - enableLoggingRequestDetails='false': request parameters and headers will be masked to prevent unsafe logging of potentially sensitive data
2021-12-30 10:19:05 - Completed initialization in 2 ms
2021-12-30 10:19:05 - POST "/story/save/1", parameters={}
2021-12-30 10:19:05 - Mapped to in.techSoft.OTM.Controller.StoryController#saveStory(int, Story)
2021-12-30 10:19:05 - Opening JPA EntityManager in OpenEntityManagerInViewInterceptor
2021-12-30 10:19:05 - Read "application/json;charset=UTF-8" to [Story(storyId=0, storyName=Collection, book=null)]
2021-12-30 10:19:05 - Found thread-bound EntityManager [SessionImpl(1720633741<open>)] for JPA transaction
2021-12-30 10:19:05 - Creating new transaction with name [org.springframework.data.jpa.repository.support.SimpleJpaRepository.findById]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT,readOnly
2021-12-30 10:19:05 - Setting JDBC Connection [HikariProxyConnection@1983273745 wrapping org.postgresql.jdbc.PgConnection@5787763b] read-only
2021-12-30 10:19:05 - Exposing JPA transaction as JDBC [org.springframework.orm.jpa.vendor.HibernateJpaDialect$HibernateConnectionHandle@6ebe9625]
Hibernate: select book0_.id as id1_0_0_, book0_.book_name as book_nam2_0_0_, storylist1_.bid as bid3_1_1_, storylist1_.story_id as story_id1_1_1_, storylist1_.story_id as story_id1_1_2_, storylist1_.bid as bid3_1_2_, storylist1_.story_name as story_na2_1_2_ from book book0_ left outer join story storylist1_ on book0_.id=storylist1_.bid where book0_.id=?
2021-12-30 10:19:05 - Initiating transaction commit
2021-12-30 10:19:05 - Committing JPA transaction on EntityManager [SessionImpl(1720633741<open>)]
2021-12-30 10:19:05 - Resetting read-only flag of JDBC Connection [HikariProxyConnection@1983273745 wrapping org.postgresql.jdbc.PgConnection@5787763b]
2021-12-30 10:19:05 - Not closing pre-bound JPA EntityManager after transaction
2021-12-30 10:19:05 - Closing JPA EntityManager in OpenEntityManagerInViewInterceptor
2021-12-30 10:19:05 - Failed to complete request: org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.StackOverflowError
2021-12-30 10:19:05 - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Handler dispatch failed; nested exception is java.lang.StackOverflowError] with root cause
java.lang.StackOverflowError: null
at in.techSoft.OTM.Entity.Book.toString(Book.java:12)
at java.base/java.lang.StringConcatHelper.stringOf(StringConcatHelper.java:453)
at in.techSoft.OTM.Entity.Story.toString(Story.java:11)
at java.base/java.lang.String.valueOf(String.java:4215)
at java.base/java.lang.StringBuilder.append(StringBuilder.java:169)
at java.base/java.util.AbstractCollection.toString(AbstractCollection.java:457)
at org.hibernate.collection.internal.PersistentBag.toString(PersistentBag.java:622)
at java.base/java.lang.StringConcatHelper.stringOf(StringConcatHelper.java:453)
2021-12-30 10:19:05 - "ERROR" dispatch for POST "/error", parameters={}
2021-12-30 10:19:05 - Mapped to org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController#error(HttpServletRequest)
2021-12-30 10:19:05 - Opening JPA EntityManager in OpenEntityManagerInViewInterceptor
2021-12-30 10:19:05 - Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/json, application/*+json]
2021-12-30 10:19:05 - Writing [{timestamp=Thu Dec 30 10:19:05 IST 2021, status=500, error=Internal Server Error, path=/story/save/1 (truncated)...]
2021-12-30 10:19:05 - Closing JPA EntityManager in OpenEntityManagerInViewInterceptor
2021-12-30 10:19:05 - Exiting from "ERROR" dispatch, status 500
存储库类 故事库
@Repository
public interface StoryRepository extends JpaRepository<Story, Integer> {
}
书库
@Repository
public interface BookRepository extends JpaRepository<Book, Integer> {
}
服务接口
@Component
public interface BookService {
public Book saveBook(Book book);
public Book findByBookId(int bookId);
public Story saveStoryBook(int id,Story story);
}
我很难在故事类中插入数据
【问题讨论】:
-
你能告诉我你的
repository和controller -
更新我的问题
-
请同时显示 Book.class 源代码。问题出在 toString 方法中。
标签: spring spring-boot hibernate spring-data-jpa