2017-08-14 98 views
0

我使用的彈簧引導和春季數據在我的項目,我有兩個類:嵌套的例外是javax.persistence.EntityNotFoundException

class Mission implements Serializable { private static final long 
serialVersionUID = 1L; 
@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
private Long    id; 
private String   departure; 
private String   arrival; 
private Boolean   isFreeWayEnabled; 
@OneToMany(mappedBy = "mission") 
private List<Station>  stations; 
// getters and setters 
} 

和第二類是:

@Entity 
public class Station implements Serializable { 

private static final long serialVersionUID = 1L; 

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
private Long    id; 
private String   station; 

@ManyToOne(fetch = FetchType.LAZY) 
@JsonBackReference 
private Mission   mission; 
//getters and setters 
} 

梅索德其中新增任務:

public Mission addMision(Mission mission) { 
// TODO Auto-generated method stub 
// Mission mission = getMissionById(mission.getId()); 
for (Station station : mission.getStations()) { 
    station.setMission(mission); 
    stationRepository.save(station); 
} 
return missionRepository.save(mission); 
} 

當我試圖添加一個新的任務它給這個錯誤:

「無法找到ID爲2的com.carpooling.entity.Station;嵌套的例外是javax.persistence.EntityNotFoundException:無法找到com.carpooling.entity.Station與ID 2"

繼承人的JSON對象發送:

{ 「出發」: 「FFF」, 「到達」: 「FFFF」, 「isFreeWayEnabled」:假的, 「站」:[{ 「ID」:1},{ 「ID」:2}]}

回答

0

您可能需要改變它有點

如果使用@ManyToOne,則引用的實體必須存在。其他明智地將該字段指定爲您已有的字段,並通過單獨的查詢檢索引用的實體。

如果它找不到請求的實體,它將引發異常(javax.persistence.EntityNotFoundException)而不是返回null。

如果您是延遲加載並且未手動處理此異常,請使用@NotFound批註來解決此異常。我已經給出了語法..

@ManyToOne(
    fetch = FetchType.LAZY) 
@NotFound(
    action = NotFoundAction.IGNORE) 
@JoinColumn(
    name = COLUMN, 
    referencedColumnName = COLUMN, 
    insertable = false, 
    updatable = false) 
private Mission mission; 
+0

感謝您的答案..但什麼是COLUMN領域? –

+0

外鍵列的名稱。以及該外鍵列引用的列的名稱。這些是可選字段。您可能需要相應地使用這些列名稱。 – surya

相關問題