簡體   English   中英

如何在Spring Boot中通過檢查嵌套對象來獲取對象?

[英]How can i get an object with checks on nested object in Spring boot?

我無法使用JpaRepository得到我想要的東西。 我將嘗試使用以下代碼解釋我想要的內容:

知識庫

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

    Optional<Company> findByIdAndBranches_parent_idIsNull(Long id);
}

服務

@Service
public class BillService {

@Autowired
private CompanyRepository companyRepository;

@Autowired
private BranchRepository branchRepository;

public Company getCompanyById(Long id)
{
    Optional<Company> company = companyRepository.findByIdAndBranches_parent_idIsNull(id);
    return company.get();
}

公司實體類

public class Company 
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private String name;

private String address;

@OneToMany(mappedBy = "company")
private List<Branch> branches;

@OneToMany(mappedBy = "company")
private List<User> users;

}

分支實體類

@Entity
public class Branch 
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private String name;

private String address;

@JsonIgnore
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "company_id")
private Company company;

@JsonIgnore
@ManyToOne(cascade = CascadeType.ALL )
@JoinColumn(name = "parent_id")
@NotFound(action = NotFoundAction.IGNORE)
private Branch parent;

@OneToMany(mappedBy = "parent")
@NotFound(action = NotFoundAction.IGNORE)
private List<Branch> subBranches;

@OneToMany(mappedBy = "branch")
private List<User> users;

}

現在我想要得到的是分支機構的父ID為NULL但與父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"
            }
        ]
    }
],
"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"
    }
]

}

如果需要過濾掉關聯的實體,可以使用@Where 它不是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);
}

使用這種方法,您總會得到只有分支機構且沒有母公司的公司。 如果需要獲取公司的所有分支機構(無論是否具有母公司),都可以為Branch實體類創建和使用存儲庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM