I have been banging my head against a wall for the past few hours. I am trying to write a post method for a site, it have been giving me nothing but errors, the latest being a NullPointer Exception. Here are the relevant models (excluding getters and setters:
Translation:
@Entity
@Table(name = "translations")
public class Translation {
@Id
@GeneratedValue
private long id;
@OneToOne
private User user;
@Column(length = 9999)
private String userTranslation;
@Column(columnDefinition = "text")
private String description_of_changes;
@Column (nullable = false)
private boolean flag_problem;
@Column(columnDefinition = "text")
private String reason;
@OneToOne
private Request request;
@OneToOne
private Translation_Status status;
Request:
@Entity
@Table(name = "requests")
public class Request {
@Id
@GeneratedValue
private long id;
@Column(unique = true, length = 1000)
private String web_page;
@Column(columnDefinition = "text")
private String untranslated_text;
@Column(columnDefinition = "text")
private String description;
@OneToOne
private Department department;
@OneToOne
private User user;
@Column(columnDefinition = "text")
private String google_translate;
@OneToOne
private Request_Status status;
@CreationTimestamp
@Temporal(TemporalType.TIMESTAMP)
@Column
private Date time;
Here is the html for the template and form:
<div class="form-group">
<form id="translateForm" th:action="@{/translate}" th:method="post" th:object="${newTranslation}">
<label for="untranslatedText">Untranslated Text</label>
<br/>
<textarea id="untranslatedText" name="untranslatedText" rows="10" th:text="${translationRequest.getUntranslated_text()}" readonly="readonly"></textarea>
<br/>
<label for="translatedText">Google Translated Text; Please make edits here</label>
<br/>
<textarea name="translatedText" id="translatedText" rows="10" th:text="${translationRequest.getGoogle_translate()}" th:field="*{userTranslation}"></textarea>
<label for="description">Please describe any changes you made</label>
<textarea name="description" id="description" rows="10" th:field="*{description_of_changes}"></textarea>
<label for="flagProblem">Are there any severe problems with the Google Translations?</label>
<select name="flagProblem" id="flagProblem" th:field="*{flag_problem}">
<option value="true">Yes</option>
<option value="false">No</option>
</select>
<br/>
<!--TODO Look into a hidden input that becomes unhidden if above input is true-->
<label for="reason">If you answered yes to the above question please explain why</label>
<input type="text" id="reason" name="reason" th:field="*{reason}"/>
<input type="hidden" id="refRequest" name="refRequest" th:value="${translationRequest.id}" th:field="*{request}"/>
<input type="submit" class="btn btn-block btn-primary" value="Submit Translation"/>
</form>
</div>
And here is the post method:
@PostMapping("/translate")
public String submitTranslation(@ModelAttribute Translation newTranslation){
User testUser = userDao.findOne(1L);
newTranslation.setUser(testUser);
Translation_Status translationStatus = translationStatusDao.findOne(101L);
newTranslation.setStatus(translationStatus);
long time = date.getTime();
Timestamp ts = new Timestamp(time);
newTranslation.setTime(ts);
Long id = newTranslation.getRequest().getId();
System.out.println(id);
Request change = requestDao.findOne(id);
Request_Status newStatus = requestStatusDao.findOne(201L);
change.setStatus(newStatus);
Translation savedTranslation = translationDao.save(newTranslation);
Request changedRequest = requestDao.save(change);
return "index";
}
My IDE is telling me that the error is occurring when I try and get newTranslation.getRequest().getId(); but I don't know why as I can call any other part of my translation object with no problems. Could someone please help me figure out what I am doing wrong?