#java #spring #thymeleaf
#java #spring #thymeleaf
Вопрос:
У меня есть следующие объекты:
@Entity
public class LabelGroup{
transient Logger logger = LoggerFactory.getLogger(LabelGroup.class);
@OneToMany(mappedBy = "labelGroup", cascade = CascadeType.ALL)
List<Token> tokens;
public List<Token> getTokens() {
return tokens;
}
public void setTokens(List<Token> tokens) {
for (Token t: tokens){
this.addToken(t);
}
}
public void addToken(Token token){
token.setLabelGroup(this);
tokens.add(token);
}
@Override
public void copy(LabelGroup other) {
setName(other.getName());
setBody(other.getBody());
}
@Override
public String getEditURL() {
return CrudEntityController.getEitURL(CrudEntityController.LABEL_GROUP_PREFIX).replace("{id}",this.getId() "");
}
public LabelGroup() {
tokens = new ArrayList<>();
}
}
и
@Entity
public class Token {
@Column(nullable = false,name = "token_key")
String key;
@Column(nullable = false,name = "token_value")
String value;
@ManyToOne(cascade = CascadeType.ALL)
LabelGroup labelGroup;
public Token() {
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public LabelGroup getLabelGroup() {
return labelGroup;
}
public void setLabelGroup(LabelGroup labelGroup) {
this.labelGroup = labelGroup;
}
}
у них также есть идентификаторы, но они оставили их здесь…
У меня есть эта форма для редактирования / создания групп меток:
<form th:action="@{__${url}__}" method="post" th:object="${newGroup}">
...
<th:block th:each="token, iter: ${newEntity.getTokens()}">
<input type="text" th:field="*{tokens[__${iter.index}__].key}">
<input type="text" th:field="*{tokens[__${iter.index}__].value}">
</th:block>
</form>
Однако, когда я пытаюсь создать новую сущность, когда я отправляю форму и регистрирую список токенов, я вижу созданные новые токены, но в базе данных столбец label_group_id не имеет значения.
@PostMapping(NEW_URL)
public String newEntitySave(@Valid @ModelAttribute("newEntity") LabelGroup entity, BindingResult result, Model model){
checkPermissionByType(NEW_URL);
boolean valid;
if(result.hasErrors()){
valid = false;
}else {
valid = validateNewEntity(entity,result);
}
if(valid){
getRepository().save(entity);
return getRedirectIndex();
}else{
setupModelForEntityForm(null,model,null);
return FORM_TEMPLATE;
}
}
Редактировать:
Мне кажется, что spring не вызывает установщики, а устанавливает значения напрямую. Это правильно? Если это так, labelGroup
количество токенов не задано. Но действительно ли единственный способ обойти это — повторять токены и устанавливать значение вручную перед сохранением объекта?
Комментарии:
1. Ваши идентификаторы автоматически сгенерированы или отправлены формой?
2. Они автоматически генерируются