I am using the following:
@Entity
@Data
@Builder
@NoArgsConstructor(force = true)
public class User {
private String id;
private String firstName;
private String lastName;
}
what I want to achieve: for JPA usage, I need a POJO with noArgConstructor, getters/setters and equals/hashCode/toString.
For instance creation (for example in tests) I want to use User.builder().build();
Problem: it does not compile, there seems to be an issue with the NoArgConstructor vs. 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: The error occurs when I try to create a new entity via new
... the builder() works.
What do I miss? Isn't it possible to use @Data, @Entity and @Builder at the same time?
try this code with lombok version 1.16.18 over :
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Entity
public class User {
private String id;
private String firstName;
private String lastName;
}
Beware of that data objects aren't entities! Simply put, there is problem with hashcode/equals (when it considers id fields) and also toString method with lazy loaded parts of entity. For reference you can check Vlad Mihalceas article.
You should:
For sure read at least something on topic of how does JPA do "dirty checking" before beeing confident that your handwritten or generated equals/hashcode method is ok.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With