Я работаю над приложением Spring, которое использует Hibernate 4.3 для управления данными, хранящимися в базе данных MySql.
Я хочу просто обновить значение этого объекта:
@Table(name = "CONTENT")
public class KcContent {
@Id
@GeneratedValue
@Column(name = "ID")
@DocumentId
private Long id;
@Column(name="PRIORITY")
private Long priority;
// getter and setter
}
Это точка, где я обновляю объект:
private EntityManager entityManager;
@Transactional
public String checkAndManageActionsNewsletter(NewsletterActionRequestBean requestBean) {
List<String> newsIds = requestBean.getNewsIds();
// update priority based on position in list
for(long priority = 0; priority < newsIds.size(); priority++) {
String newsId = newsIds.get((int) priority);
long contentId = Long.parseLong(newsId);
KcContent news = getServiceCatalog().getContentService().find(contentId);
news.setPriority(priority);
}
}
Где @Transactional
импортируется из org.springframework.transaction.annotation.Transactional
.
Этот код приводит к без обновления базы данных . Я также пытался добавить после setPriority()
:
this.entityManager.merge(news)
this.entityManager.persist(news)
, но это не работает.
Я проверил ссылку на объект в entityManager после метода setPriority()
и обновил значение.
![debug shell check](https://i.stack.imgur.com/u2mo9.png)
В базе данных вместо этого значение остается прежним (0):
![enter image description here](https://i.stack.imgur.com/ksMR9.png)
В конце я попытался изменить значения в базе данных для приоритета, и приложение прочитало их правильно, поэтому проблема, похоже, связана только с обновлением.
Есть ошибки в конфигурации?
Примечание: к сожалению, я не могу использовать JpaRepository
.
Обновление : Это реализация метода find()
в классе ContentService
:
public EntityManager getEntityManager() {
return entityManager;
}
@PersistenceContext
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}
@Override
@Transactional(readOnly=true)
public KcContent find(Long id) {
if (id == null){
return null;
}
return getEntityManager().find(KcContent.class, id);
}