我有一个非常简单的类,有一个@ManyToOne
关联。
@Entity
public class Place {
...
@ManyToOne
@RestResource(exported = false)
private Category category;
...
}
Place和Category都有各自的 导出的存储库。但对于我们的情况,我们需要在此处导出Category
字段而不是。公开了Category
的ID。
但是,当我尝试使用现有类别更新现有Place时,Hibernate无法更新。
示例PUT to /places/foo
{
...
"category": {
"name": "Farm",
"id": 4
},
...
}
Caused by: org.hibernate.HibernateException: identifier of an instance of com.phrankly.places.model.Category was altered from 2 to 4
我不确定这是怎么发生的,因为我没有设置任何Cascade
选项 - Categories
在其他地方管理。
我不想为Controller
编写自定义Place
。我还尝试使用EventHandler
手动设置字段以查看是否有帮助。
@Component
@RepositoryEventHandler(Place.class)
public class PlaceEventHandler {
@Autowired
private CategoryRepository categoryRepository;
...
@HandleBeforeSave
public void onUpdateExisting(Place place) {
if(place.getCategory() != null){
// or find by another field if you're not exposing IDs
place.setCategory(categoryRepository.findOne(place.getCategory().getId()));
}
}
...
}
但是,功能没有变化。我知道我已经超出了Spring Data REST的建议范围,但我能在这里做些什么呢?这甚至是SDR问题还是我错误地映射了这个?