The problem is that by adding a "message" object type to the "StoreActivity" entity, the first time, it does so without any problem, when iterating a second time, the program throws the exception:Multiple representations of the same entity
I have tried in the parent entity with all types of "cascades" and it does not work
Entity StoreActivity :
@Entity
@Table(name="store_activities")
public class StoreActivity implements Serializable {
@EmbeddedId
StoreActivityPk storeActivityPk = new StoreActivityPk();
@ManyToOne
@JoinColumn(name = "store_id", insertable = false, updatable = false)
@MapsId("storeId")
private Store store;
@ManyToOne
@JoinColumn(name = "activity_id", insertable = false, updatable = false)
@MapsId("activityId")
private Activity activity;
@NotEmpty
@Column(length = 500, nullable=true)
private String comment;
@OneToMany(fetch = FetchType.LAZY, cascade = {CascadeType.ALL,CascadeType.DETACH,CascadeType.PERSIST,CascadeType.REFRESH,CascadeType.REMOVE})
@JoinColumns({
@JoinColumn(name="date_activity", referencedColumnName="dateActivity"),
@JoinColumn(name="store_id", referencedColumnName="store_id"),
@JoinColumn(name="activity_id", referencedColumnName="activity_id"),
@JoinColumn(name="store_activity_hour", referencedColumnName="storeActivityHour")
})
private List<Message> messages;
//Getters and setters ...
}
StoreActivityPk :
@Embeddable
public class StoreActivityPk implements Serializable{
private Long activityId;
private Long storeId;
@Temporal(TemporalType.DATE)
private Date dateActivity;
@Temporal(TemporalType.TIME)
private Date storeActivityHour;
}
Message entity :
@Entity
@Table(name = "messages")
public class Message implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long messageId;
@NotEmpty
@Column(length = 1000, nullable=false)
private String messageContent;
@Column(length = 1, nullable=false)
private Boolean messageRead;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name="user_id")
private UserCheck userCheckSender;
@Temporal(TemporalType.TIMESTAMP)
private Date dateMessage;
//Getters and setters
}
Controller :
public class StoreActivityController {
@PostMapping("/save")
public String save(@Valid Message message, BindingResult result, Model model, RedirectAttributes flash,
SessionStatus sessionStatus, Authentication authentication,
@RequestParam(name = "storeId", required = true) Long storeId,
@RequestParam(name = "activityId", required = true) Long activityId,
@RequestParam(name = "dateActivity", required = true) @DateTimeFormat(pattern="yyyy-MM-dd") Date dateActivity) {
if (result.hasErrors()) {
model.addAttribute("title", "Mensajes");
model.addAttribute("subtitle", "Mensajes de la actividad diaria");
return "frontend/message/activitymessage";
}
UserCheck userCheck = (UserCheck) authentication.getPrincipal();
message.setUserCheckSender(userCheck);
StoreActivity storeActivity = storeActivityService.findById(activityId, storeId, new Date());
storeActivity.addMessage(message);
storeActivityService.saveStoreActivity(storeActivity);
sessionStatus.isComplete();
flash.addFlashAttribute("success", "Mensaje Enviado");
return "redirect:/message/activity/" + storeActivity.getStoreActivityPk().getActivityId() + "/store/"
+ storeActivity.getStoreActivityPk().getStoreId();
}
}
Actual result console :
2019-08-08 17:44:54.918 WARN 5024 --- [io-8090-exec-10] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.dao.InvalidDataAccessApiUsageException: Multiple representations of the same entity [cl.tricotcorp.app.checklist.models.entity.UserCheck#1] are being merged. Detached: [cl.tricotcorp.app.checklist.models.entity.UserCheck@8f06f5d]; Managed: [cl.tricotcorp.app.checklist.models.entity.UserCheck@46781997]; nested exception is java.lang.IllegalStateException: Multiple representations of the same entity [cl.tricotcorp.app.checklist.models.entity.UserCheck#1] are being merged. Detached: [cl.tricotcorp.app.checklist.models.entity.UserCheck@8f06f5d]; Managed: [cl.tricotcorp.app.checklist.models.entity.UserCheck@46781997]]