1

I have two entities that have bidirectional mapping. The entities are given below,

**Entity 1** @Entity @Table(name = "Customer") public class CustomerEntity implements Serializable { /** The Constant serialVersionUID. */ private static final long serialVersionUID = 1L; /** The id. */ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; /** The first name. */ @Column(name = "FirstName", length = 60, nullable = false) private String firstName; /** The last name. */ @Column(name = "LastName", length = 60, nullable = false) private String lastName; /** The dob. */ @Column(name = "DOB", nullable = false) private LocalDate dob; /** The mobile number. */ @Column(name = "MobileNumber", length = 10, nullable = false, unique = true) private Long mobileNumber; /** The email id. */ @Column(name = "Email", length = 100, nullable = false, unique = true) private String emailId; /** The address. */ @Column(name = "Address", length = 255) private String address; /** The created time. */ @Column(name = "CreatedTime", nullable = false) private LocalDateTime createdTime; /** The accounts. */ @OneToMany(mappedBy = "customerEntity", cascade = CascadeType.ALL) private List<AccountEntity> accountEntities = new ArrayList<>(); // Constructors, getters, setters, hashcode, equals, and toString methods are here @Override public String toString() { return "CustomerEntity [id=" + id + ", firstName=" + firstName + ", lastName=" + lastName + ", dob=" + dob + ", mobileNumber=" + mobileNumber + ", emailId=" + emailId + ", address=" + address + ", createdTime=" + createdTime + ", accountEntities=" + accountEntities + "]"; } } **Entity 2** @Entity @Table(name = "Account") public class AccountEntity implements Serializable { /** The Constant serialVersionUID. */ private static final long serialVersionUID = 1L; /** The id. */ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; /** The account number. */ @Column(name = "AccountNumber", length = 20, nullable = false, unique = true) private String accountNumber; /** The branch. */ @Column(name = "Branch", nullable = false) private String branch; /** The account type. */ @Column(name = "AccountType", nullable = false) private String accountType; /** The balance. */ @Column(name = "Balance", nullable = false) private Double balance; /** The created time. */ @Column(name = "CreatedTime", nullable = false) private LocalDateTime createdTime; /** The account holder. */ @ManyToOne(fetch = FetchType.LAZY) private CustomerEntity customerEntity; // Constructors, getters, setters, hashcode, equals, and toString methods are here @Override public String toString() { return "AccountEntity [id=" + id + ", accountNumber=" + accountNumber + ", branch=" + branch + ", accountType=" + accountType + ", balance=" + balance + ", createdTime=" + createdTime + ", customerEntity=" + customerEntity + "]"; } } 

I need to fetch all the customer entities along with its mapped accounts. My service code looks like this,

public Set<CustomerDTO> fetchCustomers(String searchKey) { List<CustomerEntity> customers = null; if (searchKey == null || searchKey.trim().isEmpty()) { **customers = customerRepository.findAll();** } else { **customers = customerRepository.findByFirstNameContainingIgnoreCaseOrLastNameContainingIgnoreCase(searchKey, searchKey);** } System.out.println(customers); return customers.stream() .map(entity -> new CustomerDTO(entity.getId(), entity.getFirstName(), entity.getLastName(), entity.getDob(), entity.getEmailId(), entity.getMobileNumber(), entity.getAddress(), entity.getCreatedTime())) .collect(Collectors.toSet()); } 

But I am getting StackOverFlowError. The log is mentioned below,

Hibernate: select customeren0_.id as id1_1_, customeren0_.address as address2_1_, customeren0_.created_time as created_3_1_, customeren0_.dob as dob4_1_, customeren0_.email as email5_1_, customeren0_.first_name as first_na6_1_, customeren0_.last_name as last_nam7_1_, customeren0_.mobile_number as mobile_n8_1_ from customer customeren0_ where customeren0_.mobile_number=? or customeren0_.email=? Hibernate: insert into customer (id, address, created_time, dob, email, first_name, last_name, mobile_number) values (null, ?, ?, ?, ?, ?, ?, ?) Hibernate: select customeren0_.id as id1_1_0_, customeren0_.address as address2_1_0_, customeren0_.created_time as created_3_1_0_, customeren0_.dob as dob4_1_0_, customeren0_.email as email5_1_0_, customeren0_.first_name as first_na6_1_0_, customeren0_.last_name as last_nam7_1_0_, customeren0_.mobile_number as mobile_n8_1_0_ from customer customeren0_ where customeren0_.id=? Hibernate: select accountent0_.id as id1_0_, accountent0_.account_number as account_2_0_, accountent0_.account_type as account_3_0_, accountent0_.balance as balance4_0_, accountent0_.branch as branch5_0_, accountent0_.created_time as created_6_0_, accountent0_.customer_entity_id as customer7_0_ from account accountent0_ left outer join customer customeren1_ on accountent0_.customer_entity_id=customeren1_.id where customeren1_.id=? and accountent0_.account_type=? Hibernate: insert into account (id, account_number, account_type, balance, branch, created_time, customer_entity_id) values (null, ?, ?, ?, ?, ?, ?) Hibernate: select customeren0_.id as id1_1_, customeren0_.address as address2_1_, customeren0_.created_time as created_3_1_, customeren0_.dob as dob4_1_, customeren0_.email as email5_1_, customeren0_.first_name as first_na6_1_, customeren0_.last_name as last_nam7_1_, customeren0_.mobile_number as mobile_n8_1_ from customer customeren0_ where upper(customeren0_.first_name) like upper(?) escape ? or upper(customeren0_.last_name) like upper(?) escape ? Hibernate: select accountent0_.customer_entity_id as customer7_0_0_, accountent0_.id as id1_0_0_, accountent0_.id as id1_0_1_, accountent0_.account_number as account_2_0_1_, accountent0_.account_type as account_3_0_1_, accountent0_.balance as balance4_0_1_, accountent0_.branch as branch5_0_1_, accountent0_.created_time as created_6_0_1_, accountent0_.customer_entity_id as customer7_0_1_ from account accountent0_ where accountent0_.customer_entity_id=? [2m2021-09-03 14:26:18.673[0;39m [31mERROR[0;39m [35m5812[0;39m [2m---[0;39m [2m[nio-8080-exec-4][0;39m [36mo.a.c.c.C.[.[.[/].[dispatcherServlet] [0;39m [2m:[0;39m 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 java.base/java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:582) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:175) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:87) ~[na:na] at java.base/java.lang.AbstractStringBuilder.<init>(AbstractStringBuilder.java:112) ~[na:na] at java.base/java.lang.StringBuilder.<init>(StringBuilder.java:127) ~[na:na] at com.assignment.bank.entities.AccountEntity.toString(AccountEntity.java:245) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at java.base/java.util.AbstractCollection.toString(AbstractCollection.java:457) ~[na:na] at org.hibernate.collection.internal.PersistentBag.toString(PersistentBag.java:622) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.CustomerEntity.toString(CustomerEntity.java:297) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.AccountEntity.toString(AccountEntity.java:247) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at java.base/java.util.AbstractCollection.toString(AbstractCollection.java:457) ~[na:na] at org.hibernate.collection.internal.PersistentBag.toString(PersistentBag.java:622) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.CustomerEntity.toString(CustomerEntity.java:297) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.AccountEntity.toString(AccountEntity.java:247) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at java.base/java.util.AbstractCollection.toString(AbstractCollection.java:457) ~[na:na] at org.hibernate.collection.internal.PersistentBag.toString(PersistentBag.java:622) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.CustomerEntity.toString(CustomerEntity.java:297) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.AccountEntity.toString(AccountEntity.java:247) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at java.base/java.util.AbstractCollection.toString(AbstractCollection.java:457) ~[na:na] at org.hibernate.collection.internal.PersistentBag.toString(PersistentBag.java:622) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.CustomerEntity.toString(CustomerEntity.java:297) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.AccountEntity.toString(AccountEntity.java:247) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at java.base/java.util.AbstractCollection.toString(AbstractCollection.java:457) ~[na:na] at org.hibernate.collection.internal.PersistentBag.toString(PersistentBag.java:622) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.CustomerEntity.toString(CustomerEntity.java:297) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.AccountEntity.toString(AccountEntity.java:247) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at java.base/java.util.AbstractCollection.toString(AbstractCollection.java:457) ~[na:na] at org.hibernate.collection.internal.PersistentBag.toString(PersistentBag.java:622) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.CustomerEntity.toString(CustomerEntity.java:297) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.AccountEntity.toString(AccountEntity.java:247) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at java.base/java.util.AbstractCollection.toString(AbstractCollection.java:457) ~[na:na] at org.hibernate.collection.internal.PersistentBag.toString(PersistentBag.java:622) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.CustomerEntity.toString(CustomerEntity.java:297) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.AccountEntity.toString(AccountEntity.java:247) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at java.base/java.util.AbstractCollection.toString(AbstractCollection.java:457) ~[na:na] at org.hibernate.collection.internal.PersistentBag.toString(PersistentBag.java:622) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.CustomerEntity.toString(CustomerEntity.java:297) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.AccountEntity.toString(AccountEntity.java:247) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at java.base/java.util.AbstractCollection.toString(AbstractCollection.java:457) ~[na:na] at org.hibernate.collection.internal.PersistentBag.toString(PersistentBag.java:622) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.CustomerEntity.toString(CustomerEntity.java:297) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.AccountEntity.toString(AccountEntity.java:247) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at java.base/java.util.AbstractCollection.toString(AbstractCollection.java:457) ~[na:na] at org.hibernate.collection.internal.PersistentBag.toString(PersistentBag.java:622) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.CustomerEntity.toString(CustomerEntity.java:297) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.AccountEntity.toString(AccountEntity.java:247) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at java.base/java.util.AbstractCollection.toString(AbstractCollection.java:457) ~[na:na] at org.hibernate.collection.internal.PersistentBag.toString(PersistentBag.java:622) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.CustomerEntity.toString(CustomerEntity.java:297) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.AccountEntity.toString(AccountEntity.java:247) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at java.base/java.util.AbstractCollection.toString(AbstractCollection.java:457) ~[na:na] at org.hibernate.collection.internal.PersistentBag.toString(PersistentBag.java:622) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.CustomerEntity.toString(CustomerEntity.java:297) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.AccountEntity.toString(AccountEntity.java:247) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at java.base/java.util.AbstractCollection.toString(AbstractCollection.java:457) ~[na:na] at org.hibernate.collection.internal.PersistentBag.toString(PersistentBag.java:622) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.CustomerEntity.toString(CustomerEntity.java:297) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.AccountEntity.toString(AccountEntity.java:247) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at java.base/java.util.AbstractCollection.toString(AbstractCollection.java:457) ~[na:na] at org.hibernate.collection.internal.PersistentBag.toString(PersistentBag.java:622) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.CustomerEntity.toString(CustomerEntity.java:297) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.AccountEntity.toString(AccountEntity.java:247) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at java.base/java.util.AbstractCollection.toString(AbstractCollection.java:457) ~[na:na] at org.hibernate.collection.internal.PersistentBag.toString(PersistentBag.java:622) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.CustomerEntity.toString(CustomerEntity.java:297) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.AccountEntity.toString(AccountEntity.java:247) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at java.base/java.util.AbstractCollection.toString(AbstractCollection.java:457) ~[na:na] at org.hibernate.collection.internal.PersistentBag.toString(PersistentBag.java:622) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.CustomerEntity.toString(CustomerEntity.java:297) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.AccountEntity.toString(AccountEntity.java:247) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at java.base/java.util.AbstractCollection.toString(AbstractCollection.java:457) ~[na:na] at org.hibernate.collection.internal.PersistentBag.toString(PersistentBag.java:622) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.CustomerEntity.toString(CustomerEntity.java:297) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.AccountEntity.toString(AccountEntity.java:247) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at java.base/java.util.AbstractCollection.toString(AbstractCollection.java:457) ~[na:na] at org.hibernate.collection.internal.PersistentBag.toString(PersistentBag.java:622) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.CustomerEntity.toString(CustomerEntity.java:297) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.AccountEntity.toString(AccountEntity.java:247) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at java.base/java.util.AbstractCollection.toString(AbstractCollection.java:457) ~[na:na] at org.hibernate.collection.internal.PersistentBag.toString(PersistentBag.java:622) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.CustomerEntity.toString(CustomerEntity.java:297) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.AccountEntity.toString(AccountEntity.java:247) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at java.base/java.util.AbstractCollection.toString(AbstractCollection.java:457) ~[na:na] at org.hibernate.collection.internal.PersistentBag.toString(PersistentBag.java:622) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.CustomerEntity.toString(CustomerEntity.java:297) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.AccountEntity.toString(AccountEntity.java:247) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at java.base/java.util.AbstractCollection.toString(AbstractCollection.java:457) ~[na:na] at org.hibernate.collection.internal.PersistentBag.toString(PersistentBag.java:622) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.CustomerEntity.toString(CustomerEntity.java:297) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.AccountEntity.toString(AccountEntity.java:247) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at java.base/java.util.AbstractCollection.toString(AbstractCollection.java:457) ~[na:na] at org.hibernate.collection.internal.PersistentBag.toString(PersistentBag.java:622) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.CustomerEntity.toString(CustomerEntity.java:297) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.AccountEntity.toString(AccountEntity.java:247) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at java.base/java.util.AbstractCollection.toString(AbstractCollection.java:457) ~[na:na] at org.hibernate.collection.internal.PersistentBag.toString(PersistentBag.java:622) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.CustomerEntity.toString(CustomerEntity.java:297) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.AccountEntity.toString(AccountEntity.java:247) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at java.base/java.util.AbstractCollection.toString(AbstractCollection.java:457) ~[na:na] at org.hibernate.collection.internal.PersistentBag.toString(PersistentBag.java:622) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.CustomerEntity.toString(CustomerEntity.java:297) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.AccountEntity.toString(AccountEntity.java:247) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at java.base/java.util.AbstractCollection.toString(AbstractCollection.java:457) ~[na:na] at org.hibernate.collection.internal.PersistentBag.toString(PersistentBag.java:622) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.CustomerEntity.toString(CustomerEntity.java:297) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at com.assignment.bank.entities.AccountEntity.toString(AccountEntity.java:247) ~[classes/:na] at java.base/java.lang.String.valueOf(String.java:3365) ~[na:na] at java.base/java.lang.StringBuilder.append(StringBuilder.java:169) ~[na:na] at java.base/java.util.AbstractCollection.toString(AbstractCollection.java:457) ~[na:na] at org.hibernate.collection.internal.PersistentBag.toString(PersistentBag.java:622) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final] 

Can anyone help?? What am I missing here?

UPDATE toString() and log updated. Couldn't add the full log due to size restriction.

5
  • 4
    Could it be your toString() method that overflows because of the circular reference? Please include the rest of the code. Commented Sep 3, 2021 at 9:10
  • Can you share the full stacktrace Commented Sep 3, 2021 at 9:15
  • @Magnilex updated the question. Please take a look.. Commented Sep 3, 2021 at 9:33
  • source code is available at github.com/SanuSanal/customer-account-tracker.git Commented Sep 3, 2021 at 9:34
  • @SanalM check my answer to see how you can avoid this error Commented Sep 3, 2021 at 9:54

3 Answers 3

2

on AccountEntity.class

 @Override public String toString() { return "AccountEntity [id=" + id + ", accountNumber=" + accountNumber + ", branch=" + branch + ", accountType=" + accountType + ", balance=" + balance + ", createdTime=" + createdTime + ", customerEntity=" + customerEntity + "]"; } 

your toString() includes customerEntity but in CustomerEntity.class there is also a field of accountEntities<AccountEntity>.

So your .toString() method get's to a recursive call of .toString() which in the end causes the stackoverflow error.

IMO .toString() on AccountEntity.class should be

 @Override public String toString() { return "AccountEntity [id=" + id + ", accountNumber=" + accountNumber + ", branch=" + branch + ", accountType=" + accountType + ", balance=" + balance + ", createdTime=" + createdTime + ", customerEntityId=" + customerEntity.getId() + "]"; } 
Sign up to request clarification or add additional context in comments.

1 Comment

This fixed the issue. Sysout caused this mess.. :D thanks everyone for the hepl.!!
0

It seems you have a circular dependency issue with your accountEntity.

if you create a new instance of an array list its recommended you add @Singular with Lombok.

@Singular private List<AccountEntity> accountEntities = new ArrayList<>(); 

also you can try and remove AccountEntity from your toString to prevent a circular dependency. or by using Lombok use:

@toString (exclude = "accountEntities") 

read here: Lombok.hashCode issue with "java.lang.StackOverflowError: null"

Comments

0

you need add @JsonIgnore above mapping relation in your entity because the mapping when called will do recursion mapping

 @Entity @Table(name = "Account") public class AccountEntity implements Serializable { /** The Constant serialVersionUID. */ private static final long serialVersionUID = 1L; /** The id. */ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; /** The account number. */ @Column(name = "AccountNumber", length = 20, nullable = false, unique = true) private String accountNumber; /** The branch. */ @Column(name = "Branch", nullable = false) private String branch; /** The account type. */ @Column(name = "AccountType", nullable = false) private String accountType; /** The balance. */ @Column(name = "Balance", nullable = false) private Double balance; /** The created time. */ @Column(name = "CreatedTime", nullable = false) private LocalDateTime createdTime; /** The account holder. */ @ManyToOne(fetch = FetchType.LAZY) @JsonIgnore private CustomerEntity customerEntity; // Constructors, getters, setters, hashcode, equals, and toString methods are here @Override public String toString() { return "AccountEntity [id=" + id + ", accountNumber=" + accountNumber + ", branch=" + branch + ", accountType=" + accountType + ", balance=" + balance + ", createdTime=" + createdTime + ", customerEntity=" + customerEntity + "]"; } } 

or you can use @JsonIgnore here

 @Entity @Table(name = "Customer") public class CustomerEntity implements Serializable { /** The Constant serialVersionUID. */ private static final long serialVersionUID = 1L; /** The id. */ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; /** The first name. */ @Column(name = "FirstName", length = 60, nullable = false) private String firstName; /** The last name. */ @Column(name = "LastName", length = 60, nullable = false) private String lastName; /** The dob. */ @Column(name = "DOB", nullable = false) private LocalDate dob; /** The mobile number. */ @Column(name = "MobileNumber", length = 10, nullable = false, unique = true) private Long mobileNumber; /** The email id. */ @Column(name = "Email", length = 100, nullable = false, unique = true) private String emailId; /** The address. */ @Column(name = "Address", length = 255) private String address; /** The created time. */ @Column(name = "CreatedTime", nullable = false) private LocalDateTime createdTime; /** The accounts. */ @OneToMany(mappedBy = "customerEntity", cascade = CascadeType.ALL) private List<AccountEntity> accountEntities = new ArrayList<>(); // Constructors, getters, setters, hashcode, equals, and toString methods are here @Override public String toString() { return "CustomerEntity [id=" + id + ", firstName=" + firstName + ", lastName=" + lastName + ", dob=" + dob + ", mobileNumber=" + mobileNumber + ", emailId=" + emailId + ", address=" + address + ", createdTime=" + createdTime + ", accountEntities=" + accountEntities + "]"; } } 

1 Comment

This is not sufficient. @JsonIgnore will be used from Jakson not when the OP calls natively System.out.println(..) which automatically invokes .toString() method

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.