2017-11-13 10 views
0

CountryオブジェクトをPetオブジェクトに設定する際に問題があります。私はこの方法でこれを行うにしようとしましたThymeleafとJPA - オブジェクトの保存ができません

@Data 
@Entity 
public class Pet { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 
    private String name; 

    @ManyToOne(fetch = FetchType.EAGER) 
    private Country country; 
    } 

@Getter 
@Setter 
@EqualsAndHashCode 
@NoArgsConstructor 
@Entity 
public class Country { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 
    private String name; 
} 

マイペットクラスは(国がデータベースからすべての国のリストですが、私はこれを属性としてモデルに追加):

<form th:object = "${pet}" th:action="@{/pet/}" method = "post"> 
    <select class="form-control" th:field="*{country}" > 
     <option th:each="countryVal : ${countries}" 
       th:value="${countryVal}" 
       th:text="${countryVal.getName()}" 
       >val 
     </option> 
    </select> 
</form> 

しかし、これは国オブジェクトをペットオブジェクトに保存しません。 が、私はこの方法でこれをしなければならなかった、私は国のオブジェクトへのIDのみを保存します。

<form th:object = "${pet}" th:action="@{/pet/}" method = "post"> 
    <select class="form-control" th:name="country.id" > 
     <option th:each="countryVal : ${countries}" 
       th:value="${countryVal.id}" 
       th:text="${countryVal.getName()}" 
       >val 
     </option> 
    </select> 
</form> 

はペットオブジェクト内のリストから国に私の国のオブジェクトを保存するためにいくつかの方法がありますか? または別の方法です。 このコードはcountry.idの既存のオブジェクトをPetクラスのオブジェクトにデータベースから保存する適切な方法ですか?

答えて

0

selectタグにth:fieldがありません。これは、国がまだnullのThymeleaf 3.

+0

に適用されます。この

<select class="form-control" th:field="*{country}"> // * is NOTa typo here <option th:each="countryVal : ${countries}" th:value="${countryVal.id}" th:text="${countryVal.getName()}" >val </option> </select> 

免責事項をお試しください。あなたのやり方で。 送信後にコントローラで国を使用しようとしましたが、java.lang.NullPointerExceptionが発生しました:null – Kutti

+0

私はあなたが何を話しているかの手がかりは持っていませんが、私があなたに示したようにしてください。 'th:field'はここで必須です。 NPE – Antoniossss

+0

あなたのやり方でこれを行うと、データベースにpetテーブルのcountry_id列のヌルフィールドがあります。 – Kutti