2016-11-09 3 views
4

Я использую следующие:Использование lomboks @data и @Builder на сущности

@Entity 
@Data 
@Builder 
@NoArgsConstructor(force = true) 
public class User { 
    private String id; 
    private String firstName; 
    private String lastName; 
} 

, что я хочу добиться: для использования JPA, мне нужен POJO с noArgConstructor, добытчиками/сеттеры и равна/хэш-код/нанизывать.

Например, создание (например, в тестах) Я хочу использовать User.builder(). Build();

Проблема: он не компилируется, кажется, есть проблема с NoArgConstructor против RequiredFieldsConstructor:

Error:(15, 1) java: constructor User in class x.y.z.User cannot be applied to given types; 
required: no arguments 
found: java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String 
reason: actual and formal argument lists differ in length 

Update: происходит ошибка, когда я пытаюсь создать новый объект через new ... работает строитель().

Что мне не хватает? Нельзя ли одновременно использовать @Data, @Entity и @Builder?

+0

ли работа, если вы определяете пустой не-арг не конструктору себя? –

+0

К сожалению, я получаю мгновенную ошибку: компилятор уже существует –

+1

Вы пытались добавить как RequiredArgsConstructor, так и NoArgsConstructor? –

ответ

0

Я отвечу на свой вопрос, опираясь на комментарии.

Прежде всего, благодаря @RoelSpilker, вы можете использовать Builder и данные вместе на одном Pojo, если вы явно предоставить AllArgs- и NoArgs- конструкторы:

@RequiredArgsConstructor 
@NoArgsConstructor 
@Data 
@Builder 
public class Person {...} 

Но: строитель создал для этого класса не знаю никаких унаследованных полей. Для моего варианта использования (с некоторыми абстрактными объектами) это решение бесполезно, и я буду придерживаться ручных помощников/разработчиков на данный момент.

+1

В вашем ответе не упоминается, что класс является сущностью JPA, но вопрос явно говорит о сущности. Если это так, вы не должны использовать '@ Data' и' @ Entity' вместе. Lombok будет генерировать 'hashCode()' и 'equals()' для вас, используя все поля - 'id' включены, чего следует избегать. Или, по крайней мере, относиться с осторожностью. – waste

1

В документации Lombok написано: Person.builder(). Name («Adam Savage»). построить();

Вы используете этот синтаксис для своей цели? Согласно вашему описанию, это не так, и можно объяснить ошибку, которую вы получите?

+0

Я не получаю ошибку, когда я использую построитель, я получаю ошибку, когда я использую конструктор по умолчанию (который я должен делать, поскольку это сущность). Обновит вопрос. –

2

попробовать этот код с Ломбок версии 1.16.18 по:

@Data 
@NoArgsConstructor 
@AllArgsConstructor 
@Builder 
@Entity 
public class User { 
    private String id; 
    private String firstName; 
    private String lastName; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^