问题描述
我正在 Spring 中处理一些 DAO 文件,但我的 BeanPropertyRowMapper 存在一些问题。它正确映射了多个属性,但对于一个属性,它返回 null。为什么会发生?这是我用于读取条目的 DAO 方法:
@Override
public Optional<Activity> read(Long id) {
try {
return Optional.ofNullable(jdbcTemplate.queryForObject("SELECT * FROM activities WHERE id=?",new BeanPropertyRowMapper<>(Activity.class),id));
} catch (EmptyResultDataAccessException e) {
return Optional.empty();
}
}
这是我的模型:
public class Activity implements Entity<Long> {
private Long id;
private Long groupId;
private Long classRoomId;
private Long lessonNumber;
private Long courseId;
public Activity() {
}
public Activity(Long id,Long groupId,Long classRoomId,Long lessonNumber,Long courseId) {
this.id = id;
this.groupId = groupId;
this.classRoomId = classRoomId;
this.lessonNumber = lessonNumber;
this.courseId = courseId;
}
public Activity(Long groupId,Long courseId) {
this.groupId = groupId;
this.classRoomId = classRoomId;
this.lessonNumber = lessonNumber;
this.courseId = courseId;
}
public Long getGroupId() {
return groupId;
}
public void setGroupId(Long groupId) {
this.groupId = groupId;
}
public Long getClassRoomId() {
return classRoomId;
}
public void setClassRoomId(Long classRoomId) {
this.classRoomId = classRoomId;
}
public Long getLessonNumber() {
return lessonNumber;
}
public void setLessonNumber(Long lessonNumber) {
this.lessonNumber = lessonNumber;
}
public Long getCourseId() {
return courseId;
}
public void setCourseId(Long courseId) {
this.courseId = courseId;
}
@Override
public Long getId() {
return id;
}
@Override
public void setId(Long id) {
this.id = id;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Activity activity = (Activity) o;
if (groupId != null ? !groupId.equals(activity.groupId) : activity.groupId != null) return false;
if (classRoomId != null ? !classRoomId.equals(activity.classRoomId) : activity.classRoomId != null)
return false;
if (lessonNumber != null ? !lessonNumber.equals(activity.lessonNumber) : activity.lessonNumber != null)
return false;
return courseId != null ? courseId.equals(activity.courseId) : activity.courseId == null;
}
@Override
public int hashCode() {
int result = groupId != null ? groupId.hashCode() : 0;
result = 31 * result + (classRoomId != null ? classRoomId.hashCode() : 0);
result = 31 * result + (lessonNumber != null ? lessonNumber.hashCode() : 0);
result = 31 * result + (courseId != null ? courseId.hashCode() : 0);
return result;
}
@Override
public String toString() {
return String.format("id is %s,groupId is %s,classRoomId is %s,lessonNumber is %s,courseId is %s",this.id,this.groupId,this.classRoomId,this.lessonNumber,this.courseId);
}
}
这是我的 Junit 测试方法:
@Test
void read() throws Exception {
Activity expected = new Activity(100L,100L,1L,100L);
Long id = activityDao.save(expected).getId();
if(activityDao.read(id).isPresent()){
Activity actual = activityDao.read(id).get();
assertEquals(expected,actual);
}else {
fail("Not found");
}
}
org.opentest4j.AssertionFailedError: 预期:id 为空,groupId 为 100,classRoom_Id 为 100,课程编号为 1,courseId 为 100 实际 :id 为 1,groupId 为 100,classRoom_Id 为 null,lessonNumber 为 1,courseId 为 100
编辑: 这是我的数据库表: enter image description here
@Override
public Optional<Activity> read(Long id) {
try {
return Optional.ofNullable(jdbcTemplate.queryForObject("SELECT a.id as id,a.group_id as groupId,a.classroom_id as classRoomId,a.lessonnumber as lessonNumber," +
" a.course_id as courseId FROM activities a WHERE id=?",id));
} catch (EmptyResultDataAccessException e) {
return Optional.empty();
}
}
然而它不起作用。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)