проверка гибернации не работает при сопоставлении один-к-одному между двумя объектами - PullRequest
0 голосов
/ 08 ноября 2018

Во время отправки формы, если есть какая-либо ошибка проверки, форма отображает сообщения об ошибках под полями. Но актуальная проблема в другом месте. У меня есть две сущности Пользователь и UserDetails . Эти объекты сопоставляются друг с другом путем двунаправленного сопоставления один к одному. Проверка работает только с полями сущности Пользователь , но не с сущностью UserDetails .

Весна - 5.0.2 ` Спящий режим - 5.2.10

User.java

@Entity
@Table(name="users")
public class User {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;

@NotEmpty(message="{common.error.msg}")
private String first_name;

@NotEmpty(message="{common.error.msg}")
private String last_name;

@NotEmpty(message="{common.error.msg}")
private String status;

@OneToOne(cascade = CascadeType.ALL, mappedBy = "user", fetch = FetchType.LAZY)
private UserDetails userDetails;

//Getter and setter methods
}

UserDetails.java

@Entity
@Table(name="user_details")
public class UserDetails {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int user_id;

@NotEmpty(message="{common.error.msg}")
private String address;

@NotEmpty(message="{common.error.msg}")
private String mobile;

@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id")
private User user;

//Getter and setter methods
}

Методы Get и Post в классе контроллера

@GetMapping(value="/create")
public String loadUserForm(Model model) {
    model.addAttribute("command", new User());
    return "backend/oms/user/form";  //JSP
}

@PostMapping(value="/create")
public String Save(@Valid @ModelAttribute("command") User user, BindingResult br, Model model, HttpSession session, RedirectAttributes ra) {
    if(br.hasErrors()) {
        return "backend/oms/user/form"; //JSP
    } else {
        try {
            int id = userService.save(user);
            if(id > 0) {
                ra.addFlashAttribute("flash_msg", "ok|User added!");
                return "redirect:/oms/user/edit/"+id;
            } else {
                return "backend/oms/user/create"; //JSP
            }
        } catch (ConstraintViolationException ex) {
            model.addAttribute("err", "Something wrong! Please try again.");
            return "backend/oms/user/form"; //JSP
        }
    }
}

messages.properties

common.error.msg=This field is required!

form.jsp

<form:form action="/oms/user/create" method="post" modelAttribute="command">
     <label>First Name</label>
     <form:input path="first_name" class="form-control" placeholder="First Name" value="" />
     <form:errors cssClass="error" path="first_name" />

     <label>Last Name</label>
     <form:input path="last_name" class="form-control" placeholder="Last Name" value="" />
     <form:errors cssClass="error" path="last_name" />

     <label>Mobile</label>
     <form:input path="userDetails.mobile" class="form-control" placeholder="Mobile" value="" />
     <form:errors cssClass="error" path="userDetails.mobile" />

     <label>Address</label>
     <form:textarea path="UserDetails.address" class="form-control" placeholder="Address" value="" />
    <form:errors cssClass="error" path="userDetails.address" />

    <label>Status</label>
    <form:select class="form-control" path="status">
       <option value="">Choose...</option>
       <option value="E">Enable</option>
       <option value="D">Disable</option>
    </form:select>
    <form:errors path="status" cssClass="error"/>

    <input type="submit" class="btn btn-primary" value="Save" />

</form>

Пожалуйста, смотрите скриншот Как вы можете видеть, только изображения из сущности User проверяются, но поля из UserDetails не проверяются. Пожалуйста, помогите.

1 Ответ

0 голосов
/ 26 ноября 2018

Решено сейчас. @ Правильная аннотация решила мою проблему. Мне нужно поместить аннотацию @Valid перед объявлением переменной объекта, как показано ниже -

@OneToMany(mappedBy="majorHead", cascade = CascadeType.ALL)
@Valid
private List<MinorHead> minorHead = new ArrayList<MinorHead>();
...