列出一对多关系中的 JPA where 子句

List JPA where clause in one-to-many relation

实验室包括一些服务器。我想做的是列出属于实验室的服务器。例如获取属于 "abc" 实验室的服务器,其 id 为 1.

以下代码获取所有服务器:

@RequestMapping(value = "servers", method = RequestMethod.GET)
public List<Server> list() {
    return serverRepository.findAll();
}

实体:

public class Server {

    @Id
    @GeneratedValue
    @Column(name = "ID")
    private Long id;

    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="LAB_ID", referencedColumnName = "ID")
    private Lab lab;
}

实体;

public class Lab {

    @Id
    @GeneratedValue
    @Column(name = "ID")
    private Long id;

    @NotNull
    @Column(name = "LAB_NAME")
    private String labName;

    @OneToMany
    private Set<Server> servers;
}

angular:

$scope.getServers= function () {
    $http.get('services/servers').then(function (response) {
        $scope.servers= response.data;
    });
};

存储库:

public interface ServerRepository extends JpaRepository<Server, Long>{

}

像这样编辑您的映射

Lab实体

@OneToMany(mappedBy="lab")
private Set<Server> servers;

Server实体

@ManyToOne
private Lab lab;

现在你可以像这样写一个 JPQL

public interface ServerRepository extends JpaRepository<Server, Long>{

    @Query("Select s from Server s where s.lab.labName = :name and s.lab.id = :id")
    List<Server> getServers(@Param("name") String name, @Param("id") Long id);

}