【发布时间】:2015-08-13 21:03:44
【问题描述】:
我有一个我认为相当简单的问题,但经过数小时的搜索后可以找到解决方案,而且我对 Spring 还比较陌生,所以请原谅任何不正确的术语或明显的错误。
我有一个事件对象,它与预订对象具有一对多的关系,如下所示
事件:
@Entity
public class Event {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long eventId;
private Date start;
private Date end;
private String title;
@OneToMany(mappedBy="event")
private Set<Booking> Bookings;
protected Event() {
// for JPA
}
// Getters and setters omitted for brevity
}
预订:
@Entity
public class Booking {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long bookingId;
private String title;
private String contact;
@ManyToOne
@JoinColumn(name="event_id", nullable=false)
private Event event;
public DiveBooking() {
// for JPA
}
// Getters and setters omitted for brevity
}
EventRepository:
public interface DiveEventRepository extends JpaRepository<Event, Long> {
List<Event> findByStartBetweenOrEndBetween(
@Param("start") Date startStartTime,
@Param("end") Date startEndTime,
@Param("start") Date endStartTime,
@Param("end") Date endEndTime);
}
BookingRepository
public interface BookingRepository extends JpaRepository<Booking, Long>{
}
这些暴露端点:
/休息/事件 /休息/预订
一个事件的实例为:
/rest/events/1
预订:
/rest/events/1/bookings
我想要实现的是创建一个新的预订并将其与一个活动相关联。我的数据模型将 event_id 作为必填字段(因为没有事件,预订就毫无意义),并且我的每一条信息都说我应该能够发布一个新的预订对象到 /rest/events /1/bookings 并让它创建一个与 id 为 1 的事件关联的新预订对象。但是,每当我尝试发布到该 URI 时,我都会收到以下消息:
加载资源失败:服务器响应状态为 405 (方法不允许)
在检查端点 /rest/events/1/bookings 的标头时,我可以看到该帖子是允许的:
访问控制允许方法:POST、GET、OPTIONS、DELETE
所以现在我完全糊涂了,不知所措。感觉我应该能够以这种方式创建预订,而且我真的不想走必须创建孤立预订然后将其与事件相关联的路线,因为它会破坏我的数据模型(必须使event_id null in booking),并且无法对事务中的操作执行这些操作(有吗?)。我已经尝试对我模型中的其他集合进行类似的操作,并且他们也发布了拒绝,所以我猜测这与我的 spring 数据休息配置有关,但我不知道是什么。
在此先感谢您提供任何帮助或指点。
【问题讨论】:
-
一个与你类似的问题.. stackoverflow.com/questions/25311978/…
标签: spring spring-data-jpa spring-data spring-data-rest