我試圖在一個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;
然后我有一個 Entrant Entity 來讓參加者參加一個活動。
@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");
}
入口服務
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為空。
從我有限的知識,我認為這是值得做的2個領域Entrants的物體,作為型別的User和Event,而不是int。但我不知道如何解決這個問題。
我遵循的教程并不是真正基于我的實作,因此我不得不進行很多更改。
uj5u.com熱心網友回復:
您可以像這樣在控制器中使用 Dto:
@PostMapping("/management/events/entrants")
createEntrant(@Valid @RequestBody EntrantDto entrant) {
System.out.println("entrant is: " entrant);
entrantService.save(entrant);
return new GenericResponse("Entrant saved");
}
EntrantDto.java
public class EntrantDto {
private Long user_id;
private Long event_id;
// no-args constructor, getter, setter,...
}
并修改一點你的服務,比如
public Entrants save(EntrantDto entrant) {
User user = this.userRepository.findById(entrant.getUser_id()).orElseThrown(IllegalArgumentException::new);
Event event = this.eventRepository.findById(entrant.getEvent_id()).orElseThrown(IllegalArgumentException::new);
Entrants entrants = new Entrants(user, event);
return entrantRepository.save(entrants);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/352367.html
