Объект Entity не сохраняется: новый объект был найден в результате отношения, которое не было помечено

Я пытаюсь сохранить следующую сущность:

public class CommentEntity {

@Id

@ManyToOne(optional=false,cascade=CascadeType.REFRESH, targetEntity=UserEntity.class)
@JoinColumn(name="USERID",referencedColumnName="USERID")
private UserEntity userEntity;

@ManyToOne(optional=false,cascade=CascadeType.REFRESH, targetEntity=PostEntity.class)
@JoinColumn(name="POSTID",referencedColumnName="POSTID")
private PostEntity postEntity;

}

Но ошибка выходит:

Во время синхронизации был обнаружен новый объект через отношение, которое не было помечено каскадом PERSIST: entity.PostEntity@16afec.

когда я пытаюсь сохранить PostEntity, он сохраняется. Такое исключение не выдается:

public class PostEntity {

@ManyToOne(optional = false, cascade = CascadeType.REFRESH, fetch = FetchType.LAZY, targetEntity = UserEntity.class)
@JoinColumn(name = "USERID", referencedColumnName = "USERID")
private UserEntity userEntity;

@OneToMany(cascade = CascadeType.ALL, mappedBy = "postEntity", fetch = FetchType.LAZY)
private List<CommentEntity> commentEntityList;
}

Почему это происходит? UserEntity - это:

public class UserEntity {

@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "userEntity")
private List<PostEntity> postEntityList;

@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "userEntity")
private List<CommentEntity> commentEntityList;
}

Я сохраняю комментарий Entity с помощью кода:

entityManagerFactory = Persistence
                    .createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
            entityManager = entityManagerFactory.createEntityManager();
            entityTransaction = entityManager.getTransaction();
            entityTransaction.begin();
            entityManager.persist(commentEntity);
            entityTransaction.commit();
            entityManager.close();

Я не могу понять, в чем может быть причина? И тогда почему PostEntity продолжает действовать в той же ситуации?

Я использую EclipseLink

1 ответ

Потому что вы пытаетесь сохранить CommentEntity, у которого либо userEntity, либо postEntity (или оба) ссылаются на сущность, которая не сохраняется. Вызов em.persist (экземпляр commentEntity) не приводит к сохранению этих сущностей, поскольку вы каскадно только обновляете. Вы должны сохранить эти объекты с отдельными вызовами em.persist.

Если это не отвечает на ваш вопрос, пожалуйста, предоставьте код, который создает сущности и сохраняет их.

Другие вопросы по тегам