【发布时间】:2016-10-25 08:41:38
【问题描述】:
我正在编写“Spring Roo in Action”一书中的代码,但遇到了问题。根据这本书,我正在生成两个 JPA 实体,产品和课程; course to offer 是一对多的依赖关系。
使用 Roo 命令外壳,我生成了两个实体之间的关系:
focus --class ~.model.Course
field set --fieldName offerings --type ~.model.Offering --cardinality ONE_TO_MANY --mappedBy "course"
focus --class ~.model.Offering
field reference --fieldName course --type ~.model.Course --cardinality MANY_TO_ONE
这已经生成了带有注释的类代码产品:
@RooJavaBean
@RooToString
@RooJpaActiveRecord
public class Offering {
/**
*/
@NotNull
@Temporal(TemporalType.TIMESTAMP)
@DateTimeFormat(style = "M-")
private Date offerDate;
/**
*/
@NotNull
@Size(min = 1, max = 80)
private String locationName;
/**
*/
@ManyToOne
private Course course;
}
课程的课程代码:
@RooJavaBean
@RooToString
@RooJpaActiveRecord
public class Course {
/**
*/
private String name;
/**
*/
private BigDecimal listPrice;
/**
*/
private String description;
/**
*/
private Integer maximumCapacity;
/**
*/
@Temporal(TemporalType.DATE)
@DateTimeFormat(style = "S-")
private Date runDate;
/**
*/
@OneToMany(cascade = CascadeType.ALL, mappedBy = "course")
private Set<Offering> offerings = new HashSet<Offering>();
/**
*/
@ManyToOne
private TrainingProgram trainingProgram;
}
现在,当我运行集成测试时,它失败了,似乎课程是持久的,但产品不是。一个 Offer 应该已被持久化,然后从数据库中检索,但没有返回:
@Test
public void addCourseAndOffering(){
CourseDataOnDemand courseDod = new CourseDataOnDemand();
Course course = courseDod.getNewTransientCourse(0);
course.setListPrice(new BigDecimal("100.00"));
OfferingDataOnDemand offerDod = new OfferingDataOnDemand();
Offering offer = offerDod.getNewTransientOffering(0);
course.getOfferings().add(offer);
course.persist();
course.flush();
course.clear();
Course persistedCourse = Course.findCourse(course.getId());
Assert.assertNotNull(persistedCourse.getId());
Assert.assertEquals(course.getListPrice(), persistedCourse.getListPrice());
Set<Offering> offers = persistedCourse.getOfferings();
int size = offers.size();
Assert.assertEquals(1, persistedCourse.getOfferings().size());
}
}
有人可以告诉我我在这里做错了什么吗?
【问题讨论】:
-
您使用的是哪个 Roo 版本?请多描述一下你的环境。
-
对不起; Spring Roo Release 1.3.2 在 STS 版本 3.8.1 上运行
-
后端数据库也是 windows-x64 上的 postgresql 版本 9.6.0-rc1。
标签: java postgresql hibernate jpa spring-roo