Reputation: 21
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
Reputation: 21
I used @Transactional
on the addTeamMember
method so it wrapped the method inside a database transaction.
Upvotes: 1