Here is my Entity Code,
package com.javaimplant.socialnetwork.model;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;
@Entity
@Table(name="users")
public class User {
@Id
@Column(name="Id")
@GenericGenerator(name="inc",strategy = "increment")
@GeneratedValue(generator = "inc")
private Integer id;
@Column(name="name")
private String userName;
@Column(name="password")
private String password;
@OneToMany(fetch=FetchType.EAGER)
private List<User> friends= new ArrayList<>();
public List<User> getFriends() {
return friends;
}
public void setFriends(List<User> friends) {
this.friends = friends;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
I want to make a @OneToMany relation so that user can choose as his friends in a Social Networking App. When I comment the friends attribute and its getters and setters everything works fine. Now when I am adding this attribute I get this below exception.
Here is the stack trace,
java.lang.StackOverflowError
org.hibernate.metamodel.mapping.internal.PluralAttributeMappingImpl$$Lambda$228/666804214.<init>(Unknown Source)
org.hibernate.metamodel.mapping.internal.PluralAttributeMappingImpl$$Lambda$228/666804214.get$Lambda(Unknown Source)
org.hibernate.metamodel.mapping.internal.PluralAttributeMappingImpl.generateFetch(PluralAttributeMappingImpl.java:363)
org.hibernate.loader.ast.internal.LoaderSelectBuilder.lambda$visitFetches$5(LoaderSelectBuilder.java:431)
java.util.ArrayList.forEach(Unknown Source)
org.hibernate.persister.entity.AbstractEntityPersister.visitFetchables(AbstractEntityPersister.java:6174)
org.hibernate.loader.ast.internal.LoaderSelectBuilder.visitFetches(LoaderSelectBuilder.java:460)
org.hibernate.loader.ast.internal.LoaderSqlAstCreationState.visitFetches(LoaderSqlAstCreationState.java:131)
org.hibernate.sql.results.graph.AbstractFetchParent.afterInitialize(AbstractFetchParent.java:31)
org.hibernate.sql.results.graph.entity.internal.EntityResultImpl.<init>(EntityResultImpl.java:52)
org.hibernate.sql.results.graph.entity.internal.EntityResultImpl.<init>(EntityResultImpl.java:34)
org.hibernate.sql.results.graph.entity.internal.EntityFetchJoinedImpl.<init>(EntityFetchJoinedImpl.java:40)
org.hibernate.metamodel.mapping.internal.EntityCollectionPart.generateFetch(EntityCollectionPart.java:130)
org.hibernate.metamodel.mapping.internal.EntityCollectionPart.generateFetch(EntityCollectionPart.java:36)
org.hibernate.loader.ast.internal.LoaderSelectBuilder.lambda$visitFetches$5(LoaderSelectBuilder.java:431)
org.hibernate.metamodel.mapping.PluralAttributeMapping.visitFetchables(PluralAttributeMapping.java:54)
org.hibernate.loader.ast.internal.LoaderSelectBuilder.visitFetches(LoaderSelectBuilder.java:460)
org.hibernate.loader.ast.internal.LoaderSqlAstCreationState.visitFetches(LoaderSqlAstCreationState.java:131)
org.hibernate.sql.results.graph.collection.internal.EagerCollectionFetch.<init>(EagerCollectionFetch.java:77)
org.hibernate.metamodel.mapping.internal.PluralAttributeMappingImpl.generateFetch(PluralAttributeMappingImpl.java:390)
org.hibernate.loader.ast.internal.LoaderSelectBuilder.lambda$visitFetches$5(LoaderSelectBuilder.java:431)
java.util.ArrayList.forEach(Unknown Source)
Here is how my database is defined,
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(45) DEFAULT NULL,
`password` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
CREATE TABLE `users_users` (
`user_id` int(11) NOT NULL,
`friends_id` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;