2017-11-13 1 views
0

Ich habe ein Problem mit der Einstellung meines Country-Objekts zu meinem Haustier-Objekt.Thymoleaf und JPA - Objekt speichern ist nicht möglich

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

My Pet Klasse

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

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

Ich habe versucht, dies auf diese Weise zu tun (Länder Liste aller Länder aus der Datenbank ist, habe ich dies als ein Attribut Modell):

<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> 

Aber dies nicht speichern Landesobjekt zu meinem Haustier Objekt. Ich hatte dies auf diese Weise zu tun, speichere ich nur id zu Land Objekt:

<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> 

Gibt es eine Möglichkeit mein Land Objekt aus der Liste zu Land in Pet-Objekt zu retten? Oder ein anderer Weg. Ist dieser Code mit country.id richtige Methode zum Speichern vorhandener Objekt von Datenbank zu Objekt in meiner Pet-Klasse?

Antwort

0

Sie vermissen th:field in select Tag. Versuchen Sie, diese

<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> 

Haftungsausschluss: Dies gilt für Thymeleaf 3.

+0

Land ist immer noch null. In deinem Weg. Ich versuchte, Land in Controller nach dem Senden zu verwenden, und ich habe java.lang.NullPointerException: null – Kutti

+0

Ich habe keine Hinweise, wovon Sie reden, aber es sollte getan werden, wie ich Ihnen gezeigt habe. 'th: field' ist hier obligatorisch. Sie überprüfen besser, wo erhalten Sie NPE – Antoniossss

+0

Wenn ich dies auf Ihre Weise tun, gibt es in der Datenbank ist Nullfeld für Spalte country_id in Haustier-Tabelle. – Kutti

Verwandte Themen