Java nd父对象和子对象之间的关系。检索整个父对象实体以查找子对象不是一个好方法,因为父对象可能包含blob数据或其他数据。 @Entity public class Parents { @Id @GeneratedValue(strateg
Java nd父对象和子对象之间的关系。检索整个父对象实体以查找子对象不是一个好方法,因为父对象可能包含blob数据或其他数据。 @Entity public class Parents { @Id @GeneratedValue(strateg,java,spring,jpa,Java,Spring,Jpa,nd父对象和子对象之间的关系。检索整个父对象实体以查找子对象不是一个好方法,因为父对象可能包含blob数据或其他数据。 @Entity public class Parents { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private long Id; @NotNull private String firstName; @NotNull private Strin
nd父对象和子对象之间的关系。检索整个父对象实体以查找子对象不是一个好方法,因为父对象可能包含blob数据或其他数据。
@Entity
public class Parents {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private long Id;
@NotNull
private String firstName;
@NotNull
private String lastName;
@OneToMany(fetch = FetchType.LAZY, mappedBy="parents")
private List<Kids> kids;
// constructor + getters & setters
@Entity
public class Kids {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private long Id;
@NotNull
private String firstName;
@NotNull
private String lastName;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "parents_id")
@NotNull
private Parents parents;
public Kids() {
}
public Kids(String firstName, String lastName, Parents parents) {
super();
this.firstName = firstName;
this.lastName = lastName;
this.parents = parents;
}
// getters & setters
public interface KidsRepo extends CrudRepository<Kids, Long> {
List<Kids> findKidsByParentId(Parents Id);
}
@Controller
public class HomeController {
KidsRepo kidsRepository;
@Autowired
public void setKidsRepository(KidsRepo kidsRepository) {
this.kidsRepository = kidsRepository;
}
}
@Service
public class KidsService {
KidsRepo kidsRepository;
ParentsRepo parentsRepository;
@Autowired
public void setKidsRepository(KidsRepo kidsRepository) {
this.kidsRepository = kidsRepository;
}
@Autowired
public void setParentsRepository(ParentsRepo parentsRepository) {
this.parentsRepository = parentsRepository;
}
public List<Kids> getKids(Parents id) {
return kidsRepository.findKidsByParentId(id);
}
}
@Query("select k from Kids k where k.parents.id = :parentId")
List<Kids> findKidsByParentId(Long parentId);
public interface KidsRepository extends CrudRepository<Kids, Long> {
List<Kids> findByParent_Id(Long id);
}
@Data
@Entity
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Parent {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotNull
private String firstName;
@NotNull
private String lastName;
}
@Controller
@AllArgsConstructor
public class ParentController {
private KidService kidService;
private ParentService parentService;
/**
* The program stores kids and one of their parents (or both)
* when I search the name of the parent the program should display the name of kid (or kids).
*/
private String findParent(@PathVariable String parentName, Model model) {
Parent parent = parentService.findParent(parentName);
List<Kid> kids = kidService.findAllKidsForParent(parentName);
model.addAttribute("parent", parent);
model.addAttribute("children", kids);
// render to appropriate view
return "home";
}
}
@Service
@AllArgsConstructor
public class ParentService {
private ParentRepository parentRepository;
public Parent findParent(String parentName) {
return parentRepository.findParentByFirstName(parentName);
}
}
public interface ParentRepository extends JpaRepository<Parent, Long> {
Parent findParentByFirstName(String firstName);
}
@Data
@Entity
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Kid {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotNull
private String firstName;
@NotNull
private String lastName;
@NotNull
@ManyToOne
private Parent parent;
}
@Service
@AllArgsConstructor
public class KidService {
private KidRepository kidRepository;
public List<Kid> findAllKidsForParent(String parentName) {
return kidRepository.findAllByParent_FirstName(parentName);
}
}
public interface KidRepository extends JpaRepository<Kid, Long> {
List<Kid> findAllByParent_FirstName(String firstName);
}
// find All kids by parent id (_ to enter into id of the parents is not necessary)
List<Kids> findAllByParentsId(long parentId);
List<String> kidsName = kidsRepository.findAllByParentsId(42l).stream()
.map(Kids::getFirstName)
.collect(Collectors.toList());