Java 如何在Spring boot中获取对嵌套对象进行检查的对象?

Java 如何在Spring boot中获取对嵌套对象进行检查的对象?,java,mysql,spring,spring-boot,Java,Mysql,Spring,Spring Boot,我无法使用JpaRepository获得我想要的内容。我将尝试使用以下代码解释我想要什么: 存储库 @Repository public interface CompanyRepository extends JpaRepository<Company, Long> { Optional<Company> findByIdAndBranches_parent_idIsNull(Long id); } 但这就是我得到的 { "id": 1, "name": "

我无法使用JpaRepository获得我想要的内容。我将尝试使用以下代码解释我想要什么:

存储库

 @Repository
public interface CompanyRepository extends JpaRepository<Company, Long> {

    Optional<Company> findByIdAndBranches_parent_idIsNull(Long id);
}
但这就是我得到的

{
"id": 1,
"name": "Lakshya",
"address": "Bahadurgarh",
"branches": [
    {
        "id": 1,
        "name": "Lakshya Branch1",
        "address": "Bahadurgarh1",
        "subBranches": [
            {
                "id": 3,
                "name": "Lakshya Branch1_3",
                "address": "Bahadurgarh1_3",
                "subBranches": [],
                "users": []
            }
        ],
        "users": [
            {
                "id": 3,
                "name": "User3_Company1_Branch1",
                "address": "Bgz"
            }
        ]
    },
    {
        "id": 3,
        "name": "Lakshya Branch1_3",
        "address": "Bahadurgarh1_3",
        "subBranches": [],
        "users": []
    }
],
"users": [
    {
        "id": 1,
        "name": "User_Company1",
        "address": "Bgz"
    },
    {
        "id": 2,
        "name": "User_Company1_Branch1",
        "address": "Bgz"
    },
    {
        "id": 3,
        "name": "User3_Company1_Branch1",
        "address": "Bgz"
    }
]

}

如果需要筛选出关联的实体,可以使用。它不是JPA规范的一部分,但Hibernate的JPA实现提供了此注释。因此,您可以指定任何其他条件:

public class Company 
{
    ...

    @OneToMany(mappedBy = "company")
    @Where(clause = "parent_id is null")
    private List<Branch> branches;

    @OneToMany(mappedBy = "company")
    private List<User> users;
}
然后您必须更改存储库的方法名称,因为您不再需要额外的条件:

@Repository
public interface CompanyRepository extends JpaRepository<Company, Long> {
    Optional<Company> findById(Long id);
}

使用这种方法,你总是可以得到那些只有分支机构而没有母公司的公司。如果您需要获取公司的所有分支机构,无论它们是否具有父级,您可以为分支机构实体类创建和使用存储库。

这是一个反复询问的问题。如果只需要特定分支,则查询需要选择分支。您可以查询选择的公司。所以你有公司。当你要求一家公司的分支机构时,你得到的是公司的分支机构,因为公司的分支机构总是包含公司的所有分支机构:这是方法的契约。假设你有两个兄弟,名叫约翰和保罗。你的问题相当于问谁有一个叫约翰的兄弟。我明白你的意思,拉克西亚。然后我问你谁是你的兄弟。这相当于调用company.getBranchs。显然,答案是约翰和保罗。如果我只想要兄弟们叫约翰,那么我应该问谁是拉克西亚的兄弟,谁叫约翰。那我就只找你哥哥约翰了。那怎么办呢?我是春季的初学者,我没有从任何教程中得到任何其他东西。你能指引我吗?那与春天无关。用于从数据库中获取数据的技术名为JPA,其实现为Hibernate。这是您应该查找文档的地方。
{
"id": 1,
"name": "Lakshya",
"address": "Bahadurgarh",
"branches": [
    {
        "id": 1,
        "name": "Lakshya Branch1",
        "address": "Bahadurgarh1",
        "subBranches": [
            {
                "id": 3,
                "name": "Lakshya Branch1_3",
                "address": "Bahadurgarh1_3",
                "subBranches": [],
                "users": []
            }
        ],
        "users": [
            {
                "id": 3,
                "name": "User3_Company1_Branch1",
                "address": "Bgz"
            }
        ]
    }
],
"users": [
    {
        "id": 1,
        "name": "User_Company1",
        "address": "Bgz"
    },
    {
        "id": 2,
        "name": "User_Company1_Branch1",
        "address": "Bgz"
    },
    {
        "id": 3,
        "name": "User3_Company1_Branch1",
        "address": "Bgz"
    }
]
}
{
"id": 1,
"name": "Lakshya",
"address": "Bahadurgarh",
"branches": [
    {
        "id": 1,
        "name": "Lakshya Branch1",
        "address": "Bahadurgarh1",
        "subBranches": [
            {
                "id": 3,
                "name": "Lakshya Branch1_3",
                "address": "Bahadurgarh1_3",
                "subBranches": [],
                "users": []
            }
        ],
        "users": [
            {
                "id": 3,
                "name": "User3_Company1_Branch1",
                "address": "Bgz"
            }
        ]
    },
    {
        "id": 3,
        "name": "Lakshya Branch1_3",
        "address": "Bahadurgarh1_3",
        "subBranches": [],
        "users": []
    }
],
"users": [
    {
        "id": 1,
        "name": "User_Company1",
        "address": "Bgz"
    },
    {
        "id": 2,
        "name": "User_Company1_Branch1",
        "address": "Bgz"
    },
    {
        "id": 3,
        "name": "User3_Company1_Branch1",
        "address": "Bgz"
    }
]
public class Company 
{
    ...

    @OneToMany(mappedBy = "company")
    @Where(clause = "parent_id is null")
    private List<Branch> branches;

    @OneToMany(mappedBy = "company")
    private List<User> users;
}
@Repository
public interface CompanyRepository extends JpaRepository<Company, Long> {
    Optional<Company> findById(Long id);
}