Это мой класс сущности
@Entity
@Data
@Table(name = "wishlist")
public class Wishlist {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@OneToOne(targetEntity = Customer.class, fetch = FetchType.EAGER)
@JoinColumn(nullable = false,name = "customer_id")
private Customer customer;
@Column(name = "created_date")
private Date createdDate;
@ManyToOne
@JoinColumn(name = "product_id")
private Products product;
public Wishlist(Customer customer, Products product) {
this.customer = customer;
this.createdDate = new Date();
this.product = product;
}
public Wishlist() {
}
}
Это мой репозиторий
public interface WishlistRepository extends JpaRepository<Wishlist, Integer> {
List<Wishlist> findAllByCustomerIdOrderByCreatedDateDesc(Integer customerId);
Optional<Wishlist> findByProductId(Integer productId);
}
Это мой сервисный слой
@Service
@Transactional
public class WishlistServiceImpl implements WishlistService{
@Autowired
WishlistRepository wishlistRepo;
@Override
public void createWishlist(Wishlist wishlist,Integer productId) throws ProductNotExistsException {
Optional<Wishlist> optionalProduct = wishlistRepo.findByProductId(productId);
System.out.println(optionalProduct)
}
}
Поэтому я пытаюсь проверить, присутствует ли продукт в моем списке желаний или не используется идентификатор продукта.
Но получаю ошибку:
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.putStringAt(AbstractStringBuilder.java:1720) ~[na:na]
at java.base/java.lang.AbstractStringBuilder.putStringAt(AbstractStringBuilder.java:1724) ~[na:na]
at java.base/java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:583) ~[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.ecommerce.entity.Customer.toString(Customer.java:29) ~[classes/:na]
Итак, как решить эту проблему?
Для клиентов, продуктов и списка пожеланий я использую @Data
Не используйте @Data с сущностями JPA, потому что toString равно и hashCode вызовет эту проблему.




может быть проблема с циклическими зависимостями.
попробуйте добавить следующую аннотацию:
@ToString.Exclude
или попробуйте переопределить реализацию toString.
В частности, где я должен дать аннотацию
@PritamDas в ваших классах сущностей в этом случае, или вы можете переопределить метод toString() своей собственной реализацией.
У вас есть циклическая зависимость между продуктом и списком пожеланий.
@Data объединяет функции @ToString, @EqualsAndHashCode, @Getter/@Setter и @RequiredArgsConstructor вместе.
Вы можете либо исключить поля из hashcode и equals с помощью @EqualsAndHashCode.Exclude (см. дополнительную информацию в введите описание ссылки здесь, либо вы можете заменить @Data на @Getter и @Setter.
Покажите нам свой метод toString() для Customer, Product и Wishlist.