Karan Mehta
Karan Mehta

Reputation: 21

Detached entity passed to persist exception

TeamMember:

@Entity
@Table(name = Constants.TEAM_MEMBER)
@ToString
@SuperBuilder(toBuilder = true)
@EqualsAndHashCode(callSuper = true)
public class TeamMember extends BaseEntity implements Serializable {

    private static final String COLUMN_COMPANY_ID_FK = "company_id_fk";

    private static final long serialVersionUID = 413726318355320936L;

    @ManyToOne
    @JoinColumn(name = COLUMN_COMPANY_ID_FK, referencedColumnName = Constants.ID, nullable = false)
    private Company company;

   // Other columns 

}

Company:

@Entity
@Table(name = Constants.COMPANY)
@ToString(callSuper = true)
@SuperBuilder(toBuilder = true)
public class Company extends BaseEntity implements Serializable {

    private static final long serialVersionUID = 6747639319802376867L;

    @Column(name = Company.COLUMN_COMPANY_NAME, nullable = false, unique = true)
    private String name;
    // Other columns

}

Test code:

    @Override
    public Response<Boolean> addTeamMember(Long companyId,
            AddTeamMemberRequest addTeamMemberRequest) {
        try {
            TeamMember teamMember = buildTeamMember(companyId,
                    addTeamMemberRequest);
            teamMemberRepository.save(teamMember);
            return new Response<>(ResponseStatus.SUCCESS, true);
        } catch (Exception ex) {
            log.error("Error has occurred while saving team member {}",
                    ExceptionUtils.getStackTrace(ex));
        }
        return new Response<>(ResponseStatus.SUCCESS, false);
    }
private TeamMember buildTeamMember(Long companyId, AddTeamMemberRequest addTeamMemberRequest) {
        Company company = companyRepository.findById(companyId)
                .orElseThrow(() -> new FeastechException(ResponseStatus.INVALID_REQUEST));
        TeamMember teamMember = new TeamMember();
        teamMember.setCompany(company);
        // Other setters
        return teamMember;
    }

The error:
2023-07-06 16:30:23.683 ERROR 28095 --- [ main] c.f.webapp.impl.TeamMemberServiceImpl : Error has occurred while saving team member org.springframework.dao.InvalidDataAccessApiUsageException: detached entity passed to persist: com.feastech.webapp.entities.Company; nested exception is org.hibernate.PersistentObjectException: detached entity passed to persist: com.feastech.webapp.entities.Company

I have tried adding cascadeType.MERGE on TeamMember but it didn't work neither did cascadeType.ALL.

Upvotes: 1

Views: 259

Answers (1)

Karan Mehta
Karan Mehta

Reputation: 21

I used @Transactional on the addTeamMember method so it wrapped the method inside a database transaction.

Upvotes: 1

Related Questions