我认为我的问题非常简单,但经过多个小时的搜索仍然找不到解决方案,而且我对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
}
事件仓库:
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 /rest/bookings
一个事件实例如下:
/rest/events/1
它的预订如下:
/rest/events/1/bookings
我想要实现的是创建一个新的预订并将其与事件关联。我的数据模型需要event_id作为必填字段(因为没有事件,预订就没有意义),而我的每个纤维都表明我应该能够将新的预订对象发布到/rest/events/1/bookings并创建一个与id为1的事件相关联的新的预订对象。然而,每当我尝试发布到该URI时,我都会收到以下消息:
"Failed to load resource: the server responded with a status of 405 (Method Not Allowed)"
检查/rest/events/1/bookings端点的标头时,我可以看到允许发布:
Access-Control-Allow-Methods:POST, GET, OPTIONS, DELETE
所以现在我完全困惑和失落。感觉我应该可以这样创建预订,我真的不想走创建孤立预订然后将其与事件关联的路线,因为这会破坏我的数据模型(需要在预订中使event_id为null),而且没有办法在事务内执行这两个操作(有吗?)。我已经尝试在我的模型的其他集合上执行类似的操作,它们也被拒绝了,所以我猜这与我的spring data rest配置有关,但我不知道是什么。感谢您提前的任何帮助或指针。