Spring 嵌套异常为javax.persistence.EntityNotFoundException
我在项目中使用spring引导和spring数据,我有两个类:Spring 嵌套异常为javax.persistence.EntityNotFoundException,spring,spring-data,Spring,Spring Data,我在项目中使用spring引导和spring数据,我有两个类: class Mission implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue( strategy = GenerationType.IDENTITY ) private Long id; private String departure; pri
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
}
增加任务的方法:
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:找不到id为2的com.carpooling.entity.Station”
下面是发送的JSON对象:
{“出发”:“fff”,“到达”:“ffff”,“isFreeWayEnabled”:false,“车站”:[{“id”:1},{“id”:2}]}
你可能需要稍微改变一下 如果使用@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;
如果你做得对。。。
在我的例子中,错误是由于尝试对非可嵌入对象(实际上是“映射”)的映射使用@ElementCollection
注释
我的解决方案以更平坦的方式映射对象,以使JPA喜欢它们。细节是去掉充当聚合器的父实体,并手动保存它所持有的不同集合(三个存储库而不是一个,三个save()调用而不是一个,少一个表).谢谢你的回答。但是列字段是什么?外键列的名称。以及外键列引用的列的名称。这些是可选字段。你可能需要相应的列名。我刚刚添加了一个投票,因为这是解决我项目中相同问题的答案,谢谢,这是uld为接受答案@suryaduplicate。
@ManyToOne(
fetch = FetchType.LAZY)
@NotFound(
action = NotFoundAction.IGNORE)
@JoinColumn(
name = COLUMN,
referencedColumnName = COLUMN,
insertable = false,
updatable = false)
private Mission mission;