個人開発でSpring Bootを使用して@Dataが使用できない場面に遭遇
個人開発で簡単なCRUD機能を持つAPIを作成していたのですが、
JPAのエンティティクラスで@Dataアノテーションが使用できない(使用しないほうがいい)問題に遭遇したので記しておきます。
修正前
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
@Table(name="booksinfo")
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id")
private int id;
@Column(name="title")
private String title;
@Column(name="price")
private Integer price;
}
修正後
@Entity
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Table(name="booksinfo")
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id")
private int id;
@Column(name="title")
private String title;
@Column(name="price")
private Integer price;
}
主な理由は以下の4点です。
- @ToString による無限ループのリスク
- @EqualsAndHashCode による Hibernate の不安定な動作
- @RequiredArgsConstructor が JPA の仕様と相性が悪い
- ID の setter を不用意に作ってしまう可能性