开发者社区 问答 正文

我试图在我的Spring启动应用程序中使用AllArgsConstructor,但是它没有为所有字段

我有以下代码,但是当我尝试在ApplicationRunner中使用它时,它给出了undefined。(提示:请使用字段创建构造函数)。我的pom.xml中已经有lombok jar。

@Data
  @NoArgsConstructor(force = true)
  @AllArgsConstructor
  @Entity
  @Table(name="customers")
  class Customer{

  //  public Customer(Object object, String string, String string2, HashSet hashSet) {
  //      // TODO Auto-generated constructor stub
  //  }
  //  
  //  public Customer() { 
  //  }

      @Id
      @GeneratedValue
      private Long id ; 

      @Column(name="first_name")
      private String first; 

      @Column(name="last_name")
      private String last; 

      @OneToMany(cascade=CascadeType.ALL, orphanRemoval=true)
      @JoinColumn(name="customer_fk")
      private Set<Order> orders = new HashSet<>();
  }

在ApplicationRunner界面的运行方法中使用时=>

@Override
        public void run(ApplicationArguments args) throws Exception {

            try {
                tt.execute( status -> {
                            Stream.of("Dave,Syer; Phil,Fisher; Mark,Web".split(";"))
                                .map( name -> name.split(",") )
                                .forEach( tpl -> this.em.persist( new Customer( null, tpl[0], tpl[1], new HashSet<>() ) ) );

                            TypedQuery<Customer> customers = this.em.createQuery("select c from Customer c", Customer.class);

                            customers.getResultList().forEach( customer -> 
                                        logger.info("typed query results is : " + ToStringBuilder.reflectionToString(customer) ));

                            return null ;
                        }) ;
            }catch ( Exception e ) {
                e.getStackTrace();
            }
        }

展开
收起
几许相思几点泪 2019-12-03 16:06:30 1227 分享 版权
阿里云 AI 助理回答

从你的描述来看,问题似乎出在尝试在ApplicationRunner中实例化Customer对象时,即使你已经使用了Lombok来生成构造函数。根据提示“请使用字段创建构造函数”,这可能意味着Lombok的注解处理没有按预期工作,或者存在其他编译时/运行时的问题。

首先,请确保以下几点:

  1. 确认Lombok插件已正确安装并启用:如果你在IDE中工作,确保已经安装了Lombok插件,并且对于你的项目,该插件是启用状态。Lombok需要IDE支持来识别其注解并自动生成代码。

  2. 检查Lombok版本兼容性:确保Lombok的版本与你的Java和Spring Boot版本兼容。不兼容的版本可能导致注解未被正确处理。

  3. 查看编译输出和警告:在构建项目时,仔细检查编译器输出或IDE的日志,看是否有任何关于Lombok的警告或错误信息。这可能会提供问题的线索。

  4. 直接添加构造函数:虽然Lombok的@AllArgsConstructor应该为你生成一个全参数的构造函数,但作为排查手段,你可以暂时手动添加构造函数以验证问题是否与Lombok相关。例如:

@AllArgsConstructor
public Customer(Long id, String first, String last, Set orders) {
    this.id = id;
    this.first = first;
    this.last = last;
    this.orders = orders;
}
  1. 清理和重建项目:有时候,IDE或构建工具的缓存可能会导致问题。尝试执行一个完整的清理(Clean)操作,然后重新构建(Build)项目。

  2. 检查pom.xml配置:确认Lombok的依赖被正确地添加到了pom.xml中,并且在正确的范围(scope)内。通常,它应该是编译(compile)范围:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>YOUR_LOMBOK_VERSION</version>
    <scope>provided</scope>
</dependency>

注意:如果仅在编译时需要Lombok(例如,在使用Spring Boot DevTools时),则可以将<scope>设置为annotationProcessor或保持默认的provided,具体取决于你的构建环境和需求。

如果以上步骤都不能解决问题,建议进一步检查项目的构建路径、依赖管理和IDE配置,以确定是否存在更深层次的问题。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答