我正在考虑使用@JoinTable
当我搜索 child 的 parent 时显示 child 的名字但有点困难它。
该程序存储 child 和他们的 parent 之一(或两者),当我搜索 parent 的名字时,程序应该显示 child (或多个 child )的名字。
需要两个接口(interface):
- parent 和 child 的名字( parent 的名字是唯一的,所以如果它已经存在,那么我们只需插入 child 的名字(及其parent_id)
当我搜索家长的姓名时,程序会显示他/她的 child (或多个 child )。
parent 表:
ID (PK, NN, AI, int)
NAME (NN, String)
- child 表:
ID (PK, NN, AI, int)
NEV (NN, String)
PARENTS_ID (NN, int)
程序应使用 FK 和 OneToMany、ManyToOne 连接,该连接使用搜索和保存。
我欢迎任何关于完成代码的最佳实践的建议。
Parents.java
@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
Kids.java
@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
数据.sql
INSERT INTO Parents (first_name, last_name) VALUES ('Viz','Elek');
INSERT INTO Parents (first_name, last_name) VALUES ('Locsolok','Anna');
INSERT INTO Parents (first_name, last_name) VALUES ('Kezmuves','Kelemen');
INSERT INTO Kids (first_name, last_name, parents_id) VALUES ('Nagy','Zolika', (SELECT id FROM Parents WHERE last_name = 'Elek'));
INSERT INTO Kids (first_name, last_name, parents_id) VALUES ('Cserkesz','Misike', (SELECT id FROM Parents WHERE last_name = 'Elek'));
INSERT INTO Kids (first_name, last_name, parents_id) VALUES ('Mézesb','Ödönke', (SELECT id FROM Parents WHERE last_name = 'Anna'));
KidsRepo.java
public interface KidsRepo extends CrudRepository<Kids, Long> {
List<Kids> findKidsByParentId(Parents Id);
}
HomeController.java
@Controller
public class HomeController {
KidsRepo kidsRepository;
@Autowired
public void setKidsRepository(KidsRepo kidsRepository) {
this.kidsRepository = kidsRepository;
}
}
KidsService.java
@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);
}
}
最佳答案
要通过家长 ID 获取 child 列表,您可以在 KidsRepo 中编写如下查询
@Query("select k from Kids k where k.parents.id = :parentId")
List<Kids> findKidsByParentId(Long parentId);
关于java - 如果我使用 Java 中的 JPA 搜索 child 的 parent 之一,如何获得 child 的姓名作为结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60491953/