【发布时间】:2019-01-15 18:28:28
【问题描述】:
公共接口 LmsRepository 扩展 CrudRepository 我没有获取单个计数的 findOne 方法,所以当我使用 findById 时出现此异常。“在类型 [java.util.Optional] 上找不到属性 [id]”我该如何解决这个问题?
这是我的 CrudRepo
@Repository
public interface LmsRepository extends CrudRepository<Book, Long> {
}
实体文件
@Entity(name="lms_tbl")
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(name="book_name")
private String bookName;
private String author;
@Column(name="purchase_date")
@Temporal(TemporalType.DATE)
private Date purchaseDate;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
and other....
服务文件
@Service
public class LmsService {
@Autowired
private LmsRepository lmsRepository;
public Collection<Book> findAllBooks(){
ArrayList<Book> books = new ArrayList<Book>();
for (Book book : lmsRepository.findAll()) {
books.add(book);
}
return books;
}
public void deleteBook(long id) {
lmsRepository.deleteById(id);
}
public Optional<Book> findById(Long id) {
return lmsRepository.findById(id);
}
}
控制器文件
@Controller
public class MainController {
@Autowired
private LmsService lmsService;
@GetMapping("/")
public String index(HttpServletRequest req) {
req.setAttribute("books", lmsService.findAllBooks());
req.setAttribute("mode","BOOK_VIEW");
return "index";
}
@GetMapping("/updateBook")
public String index(@RequestParam Long id,HttpServletRequest req) {
req.setAttribute("book", lmsService.findById(id));
req.setAttribute("mode","BOOK_EDIT");
return "index";
}
}
我尝试在 CrudRepo 中添加新方法,但它不起作用。
【问题讨论】:
-
请贴一些代码!
-
Spring Data JPA 支持 Optional,所以如果正确完成,它应该可以工作(比如这里:github.com/spring-projects/spring-data-examples/tree/master/jpa/…)。 @Zülküf 能否请您发布 LmsRepository 的整个接口定义?
-
@dunni 感谢您的帮助。
标签: java spring-boot spring-data-jpa