在Spring Data REST中更新未导出的@ManyToOne字段失败

时间:2016-12-18 22:06:27

标签: java hibernate spring-data spring-data-jpa spring-data-rest

我有一个非常简单的类,有一个@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问题还是我错误地映射了这个?

0 个答案:

没有答案