Spring boot+jpa+kotlin入門例の詳細

2143 ワード

Spring boot+jpaの文章はネット上にすでに少なくありませんが、ここでは主にkotlinで作ることを補足します.
kotlinのdata classはentityを作成するために多くのコードを減らすことができます.例えば、現在のUserのEntityはJavaバージョンです.

@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String firstName;
private String lastName;
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
}

上の大きな部分がkotlinになり、下のように:

@Entity
data class User(@Id @GeneratedValue(strategy = GenerationType.AUTO) val id: Long = 0L, val firstName: String = "", val lastName: String = "")

C#を使っている私も心を動かしていますが、Javaの開発者なら、本当に考えてみてください.
しかし、kotlinでは、Userにデフォルトの構造関数を与えないと、エラーが報告されます.エラー情報は
o.s.boot.web.support.ErrorPageFilter : Forwarding to error page from request/due to exception No default constructor for entity: : com._1b2m.springbootkotin.User; nested exception is org.hibernate.InstantiationException: No default constructor for entity: : com._1b2m.springbootkotin.User
ヒントはデフォルトのコンストラクタがないことです.上に書いたように、Userクラスのコンストラクタにパラメータのデフォルト値を追加して完了することができます.
余談ですが、JavaではIDEがgetterとsetterを生成するのに役立ちます.しかし、それでもkotlinのように長いコードを1行に縮めることができず、entity 1行で書き終わるのはあまりよくないような気がします.
また、Javaでは、CrudRepositoryを使う場合、このように使えばいいです.

@Autowired
UserRepository repository;

しかしkotlinではコンパイルが通らず、このようなエラーが報告されます.

property must be initialized or be abstract

この問題を解決するには、lateinitを増やす必要があります.

@Autowired
lateinit var repository: UserRepository

その他の基本はJavaと一致しています.
本明細書で説明するソースコードはgithubに配置される
スプリングbootプログラムを書くとき、kotlinは確かに非常に多くのコードを書くことが少なく、この言語にも期待しています.
以上、spring boot+jpa+kotlinの入門例を紹介しました.