У меня есть сценарий, подобный приведенному ниже.
Допустим, EntityA
имеет три вложенных объекта EntityB, EntityC, EntityD
. И все EntityB, EntityC, EntityD
имеют внутри несколько вложенных сущностей.
Но при выборе для EntityA
он выбирает все дерево вложенных сущностей. В то время как я хочу получить конкретную ветку c. Допустим, должны быть извлечены только EntityA, EntityB
и все суб-объекты из EntityB
, оставив EntityC
и EntityD
, тогда я не уверен, как это сделать. Поскольку spring jpa возвращает мне все вложенные объекты.
Я использую отображение коллекции ниже.
@Entity
@Table(name = "customer_party_mapping")
@Data
public class CustomerPartyMappingEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;
@Column(name = "customer_id")
private Integer custmerId;
@Column(name = "orgtype_id")
private Integer orgTypeId;
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL )
@JoinColumn(name = "customer_party_mapping_id")
@Fetch(value = FetchMode.SUBSELECT)
private List<CustomerPartyBookingLocationEntity> customerPartyBookingLocation=new ArrayList<CustomerPartyBookingLocationEntity>();
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL )
@JoinColumn(name = "customer_party_mapping_id")
@Fetch(value = FetchMode.SUBSELECT)
private List<CustomerPartyFieldMappingEntity> customerPartyFieldMappingEntity=new ArrayList<CustomerPartyFieldMappingEntity>();
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL )
@JoinColumn(name = "customer_party_mapping_id",referencedColumnName="id")
@Fetch(value = FetchMode.SUBSELECT)
private List<CustomerPartyOtherDocumentEntity> otherDocumentsList=new
ArrayList<>();
@OneToOne( cascade={ CascadeType.PERSIST, CascadeType.MERGE })
@JoinColumn(name = "customer_name_screening_id", referencedColumnName="id")
private CustomerNameScreeningEntity customerNameScreeningEntity;
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL )
@JoinColumn(name = "customer_party_mapping_id")
@Fetch(value = FetchMode.SUBSELECT)
private List<CustomerDocInfoTrackingEntity> customerDocInfoTrackingList=new
ArrayList<CustomerDocInfoTrackingEntity>();
}
А я звоню
List<CustomerPartyMappingEntity> customerPartyMappingEntityList = customerPartyMappingRepository.findByCustmerId(customerid);
Он получает весь вложенный отображенный список объектов, когда мне нужно только CustomerPartyMappingEntity
и его список customerPartyFieldMappingEntity
вложенных объектов.
Любая помощь будет принята с благодарностью.