我用龙目岛注释。我需要重写属性之一的setter方法。但这是行不通的。
我已经用@Setter(AccessLevel.NONE)
注释了该属性,然后显式调用了setProperty
。
下面提到了豆。
@Data
@AllArgsConstructor
@Slf4j
public class TestDto
{
private String code;
@Setter(AccessLevel.NONE)
private String nameCode;
public void setNameCode(String nameCode)
{
log.info(" nameCode {}", nameCode);
this.nameCode = <Call to some method>;
}
}
要在其中设置bean列表的DTO。
@Data
@NoArgsConstructor
@AllArgsConstructor
public class TestViewDto {
private List<TestDto> testDtoList;
.............Few more dto's..............................
}
这是从下面的服务中调用的。
travelAgentViewDto.setTestDto(repository.findTestNumber(number);
存储库接口定义如下:
public interface Repository extends JpaRepository<Address, AddressPk> {
public List<TestDto> findTestNumber(String number);
}
代码运行正常。唯一的问题是,在覆盖setNameCode
时,不会在setter中使用相同的内容。
应从setNameCode
方法打印以下日志:log.info(" nameCode {}", nameCode)
实际上,呼叫并没有到达那里。
答案 0 :(得分:4)
正如@Ravik所提到的,您不需要显式地告诉lombok不要生成setter;您写了一个事实意味着一个“胜利”和龙目岛一开始就不会产生那个二传手。
您没有看到被调用的setter的原因是...,因为JPA没有调用它。您有一个@AllArgsConstructor
批注; JPA正在调用那。我对JPA不太熟悉;但是,我建议您改为使用@NoArgsConstructor
,从而迫使JPA使用设置器。
答案 1 :(得分:2)
您不需要使用
@Setter(AccessLevel.NONE)
因为注释将隐藏setter方法。而是只需添加setter方法,它将起作用。