【发布时间】:2021-12-18 21:21:19
【问题描述】:
我正在尝试在 Event 和 User 实体之间建立连接,以便我可以将参与者保存到事件中。我以前从未使用过@ManyToMany 映射,因此一直在学习教程。当我尝试通过邮递员(eventid 和userid)发布数据时,我得到的都是空值。
到目前为止,我有用户和事件实体,
@Data
//Entity maps object to database
@Entity
@NoArgsConstructor
@Table(name = "member")
public class User implements UserDetails, Serializable {
//More fields
//Relationship between user and events to get entrants
@OneToMany(mappedBy = "userid", fetch = FetchType.LAZY)
Set<Entrants> entrants;
@Data
//Entity maps object to database
@Entity
@NoArgsConstructor
@Table(name = "event")
public class Event implements Serializable {
//More fields
//Relationship with event and users for entrants to an event
@OneToMany(mappedBy = "eventid",fetch = FetchType.LAZY)
Set<Entrants> entrants;
然后我有一个参赛者实体来举办活动的参赛者。
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Entrants implements Serializable {
@Id
@GeneratedValue
Long id;
@ManyToOne
@JoinColumn(name = "user_id")
User userid;
@ManyToOne
@JoinColumn(name = "event_id")
Event eventid;
}
然后在我的控制器中,
@PostMapping("/management/events/entrants")
GenericResponse createEntrant(@Valid @RequestBody Entrants entrant) {
System.out.println("entrant is: " +entrant);
entrantService.save(entrant);
return new GenericResponse("Entrant saved");
}
EntrantService
public Entrants save(Entrants entrants) {
return entrantRepository.save(entrants);
}
存储库是标准的,上面使用了save()方法。
如果我在 Postman 中发布以下内容,
{
"user_id": 1,
"event_id": 1
}
我明白了
entrant is: Entrants(id=null, userid=null, eventid=null)
id 显然是 Spring 创建的,但 userid 和 eventid 为空。
根据我有限的知识,我认为这与Entrants 实体中的两个字段有关,类型为User 和Event,而不是int。但我不确定如何解决这个问题。
我遵循的教程并不是真正基于我的实现,所以我不得不进行很多更改。
【问题讨论】:
标签: spring jpa hibernate-mapping