Project Lombok + Hibernate Нет конструктора по умолчанию для сущности - PullRequest
0 голосов
/ 11 марта 2020

У меня есть класс Employer, который выглядит следующим образом:

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;

@NoArgsConstructor
@AllArgsConstructor
@Data
@Entity
public class Employer {

  private @Id @GeneratedValue(strategy = GenerationType.IDENTITY) Long id;

  @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "employer")
  private List<Offer> offerList = new ArrayList<>();

  private String name;
  private String location;
  private String description;
  private int companySize;

  public Employer(String name, String location, String description) {
    this.name = name;
    this.location = location;
    this.description = description;
  }
}

Отправка GET-запроса на localhost: 8080 / работодатели получают меня:

ERROR 6154 --- [nio-8080-exec-7] o.a.c.c.C.[.[.[/].[dispatcherServlet: Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.orm.jpa.JpaSystemException: No default constructor for entity:  : com.krdkta.internship_for_you.model.Employer; nested exception is org.hibernate.InstantiationException: No default constructor for entity:  : com.krdkta.internship_for_you.model.Employer] with root cause

Даже при том, что есть аннотация Lombok, которая определяет это без аргумента конструктора, но все же я получаю эту ошибку. Есть ли противопоказания к использованию Ломбок с Hibernate :)?

Ответы [ 3 ]

1 голос
/ 12 марта 2020

Lombok вызывается во время компиляции (его процессор и процессор аннотаций технически). Принимая во внимание, что Hibernate используется намного позже во время выполнения.

Фактически, с точки зрения любой среды выполнения, нет никакой разницы между конструктором no-arg, сгенерированным с использованием lombok, и конструктором no-arg, созданным вручную.

Итак, чтобы прямо ответить на ваш вопрос: нет, в этом нет противоречия.

Теперь я считаю, что вы используете что-то вроде maven, где вы добавили ломбок в качестве зависимости, и его должно быть достаточно в случае, если Maven компилирует ваши классы. Однако, если вы используете lombok с IDE (например, запускаете основной класс из вашего ide), вам может потребоваться выполнить дополнительные действия:

Например, в IntelliJ вам следует go Settings -> Compiler -> Annotation Processors и включить постобработку аннотации. Этот вопрос уже задавался здесь , поэтому мне не нужно много добавлять.

Также хорошо установить плагин lombok. Он имеет интеграцию «delombok», чтобы вы могли видеть, что именно было сгенерировано lombok прямо из вашей IDE.

0 голосов
/ 12 марта 2020

Вы можете использовать его. Эта работа для моего проекта.

@Entity
@Table
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Employer {}
0 голосов
/ 11 марта 2020

Можете ли вы изменить порядок аннотаций, как это?


@Builder
@Data
@Entity
@EqualsAndHashCode
@AllArgsConstructor
@NoArgsConstructor
public class Employer {
...