0

In my program i have 3 entities Group,Teams,Employees. Where Teams comes under Group and Employees comes either directly under Group or Team. When I write query to find employees under a team using teamId I get below error.

javax.persistence.EntityNotFoundException: Unable to find com.lss.loop.model.Teams with id 3
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$JpaEntityNotFoundDelegate.handleEntityNotFound(EntityManagerFactoryBuilderImpl.java:163)
at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:216)
at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:332)
at org.hibernate.event.internal.DefaultLoadEventListener.doOnLoad(DefaultLoadEventListener.java:108)
at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:74)
at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:110)
at org.hibernate.internal.SessionImpl.fireLoadNoChecks(SessionImpl.java:1186)
at org.hibernate.internal.SessionImpl.internalLoad(SessionImpl.java:1051)
at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:697)
at org.hibernate.type.EntityType.resolve(EntityType.java:464)
at org.hibernate.type.ManyToOneType.resolve(ManyToOneType.java:240)
at org.hibernate.engine.internal.TwoPhaseLoad$EntityResolver.lambda$static$0(TwoPhaseLoad.java:576)
at org.hibernate.engine.internal.TwoPhaseLoad.initializeEntityEntryLoadedState(TwoPhaseLoad.java:221)
at org.hibernate.engine.internal.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:155)
at org.hibernate.engine.internal.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:126)
at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:1193)
at org.hibernate.loader.Loader.processResultSet(Loader.java:1001)
at org.hibernate.loader.Loader.doQuery(Loader.java:959)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:349)
at org.hibernate.loader.Loader.doList(Loader.java:2843)
at org.hibernate.loader.Loader.doList(Loader.java:2825)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2657)
at org.hibernate.loader.Loader.list(Loader.java:2652)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:506)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:400)
at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:219)
at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1414)
at org.hibernate.query.internal.AbstractProducedQuery.doList(AbstractProducedQuery.java:1636)
at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1604)
at com.lss.loopschoolsecond.service.LoopService.getTeamParticipatingStatusEvents(LoopService.java:11322)
at com.lss.loopschoolsecond.service.LoopService$$FastClassBySpringCGLIB$$ecf8f0e5.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:139)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:367)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:118)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)
at com.lss.loopschoolsecond.service.LoopService$$EnhancerBySpringCGLIB$$eb9065bd.getTeamParticipatingStatusEvents(<generated>)
at com.lss.loopschoolsecond.controller.LoopController.getTeamParticipatingStatusEvents(LoopController.java:16179)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:878)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:792)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)

I checked database and confirmed there is a record on Team table with id = 3 and a set of employees with teamId as 3.Below is my code.

List<Employees> employeeList = new ArrayList<Employees>();
        Query query = session.createQuery("FROM Employees where teamId.id = :teamId and active = 1");
        query.setParameter("teamId", teamId);
        employeeList = query.list();

If I run below query in mysql i am getting the required result.

SELECT * FROM employees where team_id = 3 and active = 1

Below are my classes.

Employees.java :

@Entity
@Table(name = "employees")
public class Employees implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private long id;

@JoinColumn(name = "event_id", referencedColumnName = "id", nullable = true)
@ManyToOne
private Group groupId;

@JoinColumn(name = "team_id", referencedColumnName = "id", nullable = true)
@ManyToOne(optional = true)
private Teams teamId;

@Column(name="type")
private int type;

@JoinColumn(name = "user_id", referencedColumnName = "user_id", nullable = false)
@OneToOne(optional = false)
private UserStaff userId;

@Column(name="approval_status")
private int approvalStatus;

@Column(name = "approval_date")
@JsonAdapter(DateJsonSerializer.class)
private Date approvalDate;

@Column(name = "comments")
private String comments;

@Column(name="active")
private boolean active;

public Employees() {

}

public Employees(long id, Group groupId, Teams teamId, int type, UserStaff userId, int approvalStatus, Date approvalDate, String comments, boolean active) {
    this.id = id;
    this.groupId = groupId;
    this.teamId = teamId;
    this.type = type;
    this.userId = userId;
    this.approvalStatus = approvalStatus;
    this.approvalDate = approvalDate;
    this.comments = comments;
    this.active = active;
}

public long getId() {
    return id;
}

public void setId(long id) {
    this.id = id;
}

public Group getGroupId() {
    return groupId;
}

public void setGroupId(Group groupId) {
    this.groupId = groupId;
}

public Teams getTeamId() {
    return teamId;
}

public void setTeamId(Teams teamId) {
    this.teamId = teamId;
}

public int getType() {
    return type;
}

public void setType(int type) {
    this.type = type;
}

public UserStaff getUserId() {
    return userId;
}

public void setUserId(UserStaff userId) {
    this.userId = userId;
}

public int getApprovalStatus() {
    return approvalStatus;
}

public void setApprovalStatus(int approvalStatus) {
    this.approvalStatus = approvalStatus;
}

public Date getApprovalDate() {
    return approvalDate;
}

public void setApprovalDate(Date approvalDate) {
    this.approvalDate = approvalDate;
}

public String getComments() {
    return comments;
}

public void setComments(String comments) {
    this.comments = comments;
}

public boolean isActive() {
    return active;
}

public void setActive(boolean active) {
    this.active = active;
}

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    Employees that = (Employees) o;
    return id == that.id &&
            type == that.type &&
            approvalStatus == that.approvalStatus &&
            active == that.active &&
            Objects.equals(groupId, that.groupId) &&
            Objects.equals(teamId, that.teamId) &&
            Objects.equals(userId, that.userId) &&
            Objects.equals(approvalDate, that.approvalDate) &&
            Objects.equals(comments, that.comments);
}

@Override
public int hashCode() {
    return Objects.hash(id, groupId, teamId, type, userId, approvalStatus, approvalDate, comments, active);
}
}

Teams.java:

@Entity
@Table(name = "teams")
public class Teams implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private long id;

@JoinColumn(name = "group_id", referencedColumnName = "id", nullable = false)
@OneToOne(optional = false)
private Group groupId;

@Column(name="name")
private String name;

@Column(name="active")
private boolean active;

public EventTeams() {

}

public EventTeams(long id, Group groupId, String name, boolean active) {
    this.id = id;
    this.groupId = groupId;
    this.name = name;
    this.active = active;
}

public long getId() {
    return id;
}

public void setId(long id) {
    this.id = id;
}

public Group getGroupId() {
    return eventId;
}

public void setGroupId(Group eventId) {
    this.eventId = eventId;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public boolean isActive() {
    return active;
}

public void setActive(boolean active) {
    this.active = active;
}
}

Group.java :

@Entity
@Table(name = "group")
public class Group implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private long id;

@Column(name="name")
private String name;

@Column(name="type")
private int type;

@Column(name="description")
private String description;

@Column(name="active")
private boolean active;

public GroupEvent() {

}

public Group(long id, String name, int type, String description, boolean active) {
    this.id = id;
    this.name = name;
    this.type = type;
    this.description = description;
    this.active = active;
}

public long getId() {
    return id;
}

public void setId(long id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public int getType() {
    return type;
}

public void setType(int type) {
    this.type = type;
}

public String getDescription() {
    return description;
}

public void setDescription(String description) {
    this.description = description;
}

public boolean isActive() {
    return active;
}

public void setActive(boolean active) {
    this.active = active;
}

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    Group that = (Group) o;
    return id == that.id &&
            type == that.type &&
            active == that.active &&
            Objects.equals(name, that.name) &&
            Objects.equals(description, that.description);
}

@Override
public int hashCode() {
    return Objects.hash(id, name, type, description, active);
}
}

My spring boot dependecy is as below.

org.springframework.boot:spring-boot-gradle-plugin:2.3.12.RELEASE

I have looked through the accepted answer in Hibernate - unable to find Entity with ID and it doesn't answer my question because i wrote optional = true instead of optional = false and also I checked by removing it from code and no effect on result.

UPDATE :

I maid some adjustments in the code by finding out the Team entity with id as 3 and then used this entity to collect the employees and then I got the result.I don't know the exact reason and why it's behaving like this.

Teams teams = new Teams();
    Query query = session.createQuery("FROM Teams where active = 1 and id = :teamId");
    query.setParameter("teamId", teamId);
    if(query.list().size() > 0) {
       teams = (Teams) query.list().get(0);
       query = session.createQuery("FROM Employees where teamId.id = :teamId and active = 1");
       query.setParameter("teamId", teams.getId());
       employeeList = query.list();
    }
KJEjava48
  • 1,967
  • 7
  • 40
  • 69

1 Answers1

0

I maid some adjustments in the code by finding out the Team entity with id as 3 and then used this entity to collect the employees and then I got the result.I don't know the exact reason and why it's behaving like this.I am just posting this answer here because its just a workaround which will help others if no other option is there,but this will not be the exact solution.

Teams teams = new Teams();
Query query = session.createQuery("FROM Teams where active = 1 and id = :teamId");
query.setParameter("teamId", teamId);
if(query.list().size() > 0) {
   teams = (Teams) query.list().get(0);
   query = session.createQuery("FROM Employees where teamId.id = :teamId and active = 1");
   query.setParameter("teamId", teams.getId());
   employeeList = query.list();
}

If anyone can explain why its so it will be greate.

KJEjava48
  • 1,967
  • 7
  • 40
  • 69