我在项目中使用spring boot和spring数据,我有两个类:
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
}
添加任务的Methode:
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 );
}
当我尝试添加新任务时,它会出现此错误:
&#34;无法找到ID为2的com.carpooling.entity.Station;嵌套异常是javax.persistence.EntityNotFoundException:无法找到ID为2&#34的com.carpooling.entity.Station;
继发JSON对象已发送:
{&#34;离开&#34;:&#34; FFF&#34;&#34;到达&#34;:&#34; FFFF&#34;&#34; isFreeWayEnabled&#34;:假&#34;站&#34;:[{&#34; ID&#34;:1},{&#34; ID&#34;:2}]}
答案 0 :(得分:0)
你可能需要稍微改变一下。
如果使用@ManyToOne,则引用的实体必须存在。否则,将该字段指定为已有的long,并通过单独的查询检索引用的实体。
如果无法找到所请求的实体,它会抛出异常(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;
答案 1 :(得分:0)
在我的情况下,该错误是由于尝试对非@ElementCollection
对象(实际上是Map @Embeddable
注释。
我的解决方案通过一种扁平的方式来映射对象,以使它们可以被JPA接受。详细信息摆脱了充当聚合器的父实体,并手动保存了它持有的不同集合(三个存储库而不是一个,三个save()调用而不是一个,少了一个表)。