【发布时间】:2020-06-14 09:19:17
【问题描述】:
我创建了一个带有两个表(书籍、成员)的 MySql 数据库。一个成员可以有很多本书,而某本书只能有一个成员。我想创建一个 Spring Boot 项目,该项目将是一个 REST API,可在数据库上执行 CRUD 操作。对于数据库操作,我使用 Spring Data JPA。
接下来我创建了两个类,称为书籍和成员。
@Entity
@Table(name = "members")
public class Members {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "last_name")
private String lastName;
@Column(name = "first_name")
private String firstName;
@Column(name = "address")
private String address;
@Column(name = "phone_num")
private String phoneNum;
@Column(name = "email")
private String email;
@OneToMany(mappedBy = "members", cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
private List<Books> books;
//getters and setters
@Entity
@Table(name = "books")
public class Books {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "title")
private String title;
@Column(name = "author_last_name")
private String authorLastName;
@Column(name = "author_first_name")
private String authorFirstName;
@Column(name = "publisher")
private String publisher;
@Column(name = "publishing_year")
private String publishingYear;
@ManyToOne(cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
@JoinColumn(name = "id_member")
private Members members;
//getters and setters
我创建了一个名为 LibraryRepository 的接口,它扩展了 JpaRepository。
public interface LibraryRepository extends JpaRepository<Members, Integer> {
}
我的图书馆服务接口
public interface LibraryService {
List<Members> findAll();
}
和 LibraryServiceImpl 类
@Service
public class LibraryServiceImpl implements LibraryService {
private LibraryRepository libraryRepository;
@Autowired
public LibraryServiceImpl(LibraryRepository libraryRepository) {
this.libraryRepository = libraryRepository;
}
@Override
public List<Members> findAll() {
return libraryRepository.findAll();
}
}
和休息控制器
@RestController
@RequestMapping("/api")
public class LibraryRestController {
private LibraryService libraryService;
@Autowired
public LibraryRestController(LibraryService libraryService) {
this.libraryService = libraryService;
}
@GetMapping("/loans")
public List<Members> findAll(){
return libraryService.findAll();
}
}
其中一位成员借出一本书。
当我运行应用程序并在 http://localhost:8080/api/loans 上使用 GET 方法时,返回的是一个无限列表。一个会员有一本书,这本书有一个会员,这个会员有一本书等等......
我相信某些东西被错误地映射到我的实体类上,但我找不到确切的内容。
【问题讨论】:
标签: mysql spring-boot hibernate spring-data-jpa