首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用spring从数据库中检索数据

无法使用spring从数据库中检索数据
EN

Stack Overflow用户
提问于 2014-04-09 19:46:23
回答 1查看 2.3K关注 0票数 0

我试图使用Spring CrudRepository的方法将具有其他对象的对象列表保存为属性。我的服务如下

代码语言:javascript
复制
@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类是:

代码语言:javascript
复制
@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;
....

飞机等级是:

代码语言:javascript
复制
@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;

当我执行以下测试时:

代码语言:javascript
复制
@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());

}

我得到以下错误:

代码语言:javascript
复制
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

我知道保存方法有问题,但我不知道如何解决。有人能帮忙吗?

EN

回答 1

Stack Overflow用户

发布于 2014-04-09 20:06:11

很难猜,因为我们不知道你从

代码语言:javascript
复制
Map<String, MyJob> jobsMap = htmlDataExtractorService.parsePage("/Report.html");

但我猜应该是缺失的级联配置。您的jobsMap似乎包含一个与id 5004的飞机相关联的MyJob对象,但是该飞机似乎没有在以前持久化。如果您将关联标记为

代码语言:javascript
复制
@ManyToOne(cascade = CascadeType.ALL)

代码语言:javascript
复制
@ManyToOne(cascade = CascadeType.PERSIST)

JPA应自动为您保留飞机。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22972548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档