如何在验证之前重新加载我的hibernate依赖对象

时间:2014-07-02 10:02:05

标签: spring hibernate spring-mvc

我有一个Spring控制器,其代码如下:

@RequestMapping("save")
public String save(@ModelAttribute @Valid Form form, BindingResult result){     

    if( result.hasErrors()){
    [...]

我的表单包含一个hibernate对象列表。所有人都设置了他们的属性。我创建了一个编辑HTML表单,在控制器中我发现ManyToOne关系中的所有对象都丢失了。我只有身份证。我可以从数据库重新加载数据,但是@valid注释所带来的验证为时已晚。

public class Form{

@Valid
@NotNull
private List<Item> item;

@NotNull
private Foo foo;

[...]

和物品

@Entity
@Table(name = "item")
@XmlRootElement
public class Item{

    @ManyToOne()
    @JoinColumn(name = "dependent", referencedColumnName = "id", nullable = false)
    @NotNull
    private Dependent dependent;

    @NotNull
    private Currency currency;

如何在验证之前设置Dependent和Currency字段?有没有替代方法从数据库重新加载数据?

(免责声明一些名称已经改变以保护无辜者)

2 个答案:

答案 0 :(得分:0)

如果您使用的是Spring-Data-JPA,可以register DomainClassConverter为您完成此项工作。在另一种情况下,您可以自己编写这样的转换器。

答案 1 :(得分:0)

我找到了一种方法:

  1. 向控制器添加对SmartValidator的引用。

    @Autowired私人SmartValidator验证器;

  2. 删除@valid注释。重新加载所有ManyToOne表并手动调用验证器。

    @RequestMapping( “保存”) public String save(@ModelAttribute Form form,BindingResult result){

    for(Item item:form.getItems()){     item.setDependant(myDAO.reload(item.getDependent()));
    }

    validator.validate(表单,结果);

    if(result.hasErrors()){ [...]