java - 如果我使用 Java 中的 JPA 搜索 child 的 parent 之一,如何获得 child 的姓名作为结果?

标签 java spring jpa

我正在考虑使用@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/

相关文章:

java - EJB3 - @Column(insertable ="false") 问题

java - 覆盆子中 jaydebeapi 的问题类路径

java - 将 spring-cloud 与 netflix Eureka 一起使用时,如何让 Discovery Client 工作?

MySQL Connector/J 长时间运行的进程

java - CXF Web 客户端中的动态查询参数

java - GwtUploader - Spring

java - 尝试在jpa中删除时的并发问题

java - 通过 for 循环循环的通用集合

java - fragment 内单选按钮 OnCheckedChangeListener 错误

java - WebLogic启动时设置环境变量的最佳方式