我试图使用Spring CrudRepository的方法将具有其他对象的对象列表保存为属性。我的服务如下
@Service
@Transactional
public class DBDataManipulatorServiceImpl implements DBDataManipulatorService {
@Autowired
private AircraftRepository aircraftRepository;
@Autowired
private WorkPackageRepository workPackageRepository;
@Autowired
private MyJobRepository myJobRepository;
@Override
@Transactional
public List<MyJob> saveToDataBase(List<MyJob> jobs) {
List<MyJob> newJobs = new ArrayList<MyJob>();
MyJob myJob = null;
for (MyJob job : jobs) {
myJob = myJobRepository.save(job);
newJobs.add(myJob);
}
return newJobs;
} ...而myJob类是:
@Entity
@Table(name="job", uniqueConstraints=@UniqueConstraint(columnNames={"jobId"}))
public class MyJob implements Serializable {
@Id
@Column(name = "jobId")
private String jobId;
private String jobStatus;
@ManyToOne()
private Aircraft aircraft;
@ManyToOne()
private WorkPackage workPackage;
....飞机等级是:
@Entity
@Table(name="aircraft", uniqueConstraints=@UniqueConstraint(columnNames={"aircraftId"}))
public class Aircraft implements Serializable{
@Id
@Column(name = "aircraftId")
private String aircraftId;
@Column (name = "TYPE")
private String type;
@Column (name = "MODEL")
private String model;当我执行以下测试时:
@Test
public void testSaveToDataBaseWithFiles() {
HTMLDataExtractorServiceImpl htmlDataExtractorService = new HTMLDataExtractorServiceImpl();
Map<String, MyJob> jobsMap = htmlDataExtractorService.parsePage("/Report.html");
List<MyJob> jobs = new ArrayList<MyJob>(jobsMap.values());
List<MyJob> myjobs = dbDataManipulatorService.saveToDataBase(jobs);
jobsMap = myJobsListToMyJobsMap(myjobs);
MyJob myJob = jobsMap.get("20316408");
assertEquals("SUCCESS",myJob.getJobStatus());
assertEquals("50005", myJob.getAircraft().getAircraftId());
assertEquals("WP6_27", myJob.getWorkPackage().getWorkPackageId());
}我得到以下错误:
org.springframework.orm.jpa.JpaObjectRetrievalFailureException: Unable to find com.domain.Aircraft with id 50004; nested exception is javax.persistence.EntityNotFoundException: Unable to find com.domain.Aircraft with id 50004我知道保存方法有问题,但我不知道如何解决。有人能帮忙吗?
发布于 2014-04-09 20:06:11
很难猜,因为我们不知道你从
Map<String, MyJob> jobsMap = htmlDataExtractorService.parsePage("/Report.html");但我猜应该是缺失的级联配置。您的jobsMap似乎包含一个与id 5004的飞机相关联的MyJob对象,但是该飞机似乎没有在以前持久化。如果您将关联标记为
@ManyToOne(cascade = CascadeType.ALL)或
@ManyToOne(cascade = CascadeType.PERSIST)JPA应自动为您保留飞机。
https://stackoverflow.com/questions/22972548
复制相似问题