同一实体错误的多种表示形式

时间:2019-08-08 21:50:47

标签: java spring-boot jpa

问题在于,第一次将“消息”对象类型添加到“ StoreActivity”实体中,这样做没有任何问题,第二次迭代时,程序抛出异常:同一对象的多个表示形式实体

我已尝试使用所有类型的“级联”的父实体,但它不起作用

实体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;
}

消息实体:

@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
}

控制器:

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();
    }

}

实际结果控制台:

  

2019-08-08 17:44:54.918 WARN 5024 --- [io-8090-exec-10] .mmaExceptionHandlerExceptionResolver:已解决[org.springframework.dao.InvalidDataAccessApiUsageException:同一实体的多个表示形式[cl。 tricotcorp.app.checklist.models.entity.UserCheck#1]正在合并。分离:[cl.tricotcorp.app.checklist.models.entity.UserCheck@8f06f5d];托管:[cl.tricotcorp.app.checklist.models.entity.UserCheck@46781997];嵌套异常是java.lang.IllegalStateException:合并同一实体[cl.tricotcorp.app.checklist.models.entity.UserCheck#1]的多个表示形式。分离:[cl.tricotcorp.app.checklist.models.entity.UserCheck@8f06f5d];托管:[cl.tricotcorp.app.checklist.models.entity.UserCheck@46781997]]

0 个答案:

没有答案
相关问题