gpt4 book ai didi

java - Spring Boot : Disable fetch of PersistentBag programatically

转载 作者:行者123 更新时间:2023-12-04 08:35:25 25 4
gpt4 key购买 nike

我在 Spring Boot 中有一个实体,它看起来像这样:

@Entity
@Table(name = "race_class")
@Getter @Setter
public class RaceClass
{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer dbid;

private String name;

private String colorHexcode;

@OneToMany(fetch = FetchType.LAZY, mappedBy = "raceClass", cascade = CascadeType.ALL)
private List<Entry> entries;
}
在我的服务中,我已经有了一种方法,它额外获取了 Raceclass 的所有条目。看起来像这样:
public List<RaceClassDto> getClassesEntries( int eventDbid )
{
return this.raceClassRepo.findByEventDbid( eventDbid )
.stream()
.map( c -> addEntriesToRaceClass( eventDbid, c ) )
.map( raceClassMapper :: mapToDto )
.collect( Collectors.toList() );
}
映射器看起来像这样:
public RaceClassDto mapToDto( RaceClass raceClass )
{
return modelMapper.map ( raceClass, RaceClassDto.class );
}
现在,我想要第二种方法,它不会自动获取条目。
但这正是我的问题。新方法如下所示:
public List<RaceClassDto> getClasses( int eventDbid )
{
return this.raceClassRepo.findByEventDbid( eventDbid )
.stream()
.map( raceClassMapper :: mapToDto )
.collect( Collectors.toList() );
}
但是条目仍然会被获取,因为 getEntries() 将在 DTO-Mapper 中被调用,它会自动执行选择查询并填充条目容器。
如何仅针对 getClassesEntries() 方法以编程方式禁用 PersistentBag 的自动同步?

最佳答案

我认为您不能以编程方式禁用关系解析。
更好的方法是在映射器中定义一个新方法,将其命名为 mapToDTOWithoutResolvingEntries ,并且不解决该方法中的关系。
对于您的意见,如果您正在使用 ModelMapper,在您的特定用例中,也许您可​​以 skip entries您的 DTO 的属性(property)。
请尝试以下操作:

public RaceClassDto mapToDTOWithoutResolvingEntries( RaceClass raceClass) {
return modelMapperWithoutResolvingEntries
.map ( raceClass, RaceClassDto.class );
}
哪里 modelMapperWithoutResolvingEntries是一样的 modelMapper您之前定义的以下内容 mapping添加:
ModelMapper modelMapperWithoutResolvingEntries = new ModelMapper();
modelMapperWithoutResolvingEntries
.addMappings(mapper -> mapper.skip(RaceClassDto::setEntries));
您可以使用创建 TypeMap 相反,它的行为应该相同。
你还有其他选择。例如,您可以提供自己的 PropertyMap (请参阅相关的 javadoc 以及它们如何覆盖 configure 方法),或者甚至是 Converter .

关于java - Spring Boot : Disable fetch of PersistentBag programatically,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64821938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com