带注释的hibernate验证

时间:2012-07-11 08:46:20

标签: hibernate servlets

我发现我的hibernate验证无法正常工作。我正在使用带有注释的hibernate3。请检查以下代码。

@Entity
@Table(name = "registration")
public class Pojo implements Serializable{

    @Id
    @Column(name = "id")
    @NotNull
    private int id;
    @Column(name = "name", length=5)
    @NotNull
    private String name;
    @Column(name = "surname", length=5)
    @NotNull
    private String surname;
    @Column(name = "address", length=5)
    @NotNull
    private String address;
getters and setters

}

以下是我的servlet

System.out.println("Kshitij-----");
        PrintWriter out = response.getWriter();
        SessionFactory sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
        Session session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();
        Pojo r = new Pojo();
        r.setId(Integer.valueOf(request.getParameter("id")));
        r.setName(request.getParameter("name"));
        r.setSurname(request.getParameter("surname"));
        r.setAddress(request.getParameter("address"));
        session.save(r);
        transaction.commit();
        session.close();
        out.println("Success.....");

它正在插入没有值的记录。我应该添加新的东西。?

3 个答案:

答案 0 :(得分:0)

验证不是您为何不保存数据的问题。 session.close();关闭会话但您需要在此之前调用flush。这是使用会话来成功保存数据的核心订单:

flush the session
commit the transaction
close the session
handle exceptions

See文档

答案 1 :(得分:0)

尝试直接使用;

验证实体
ValidatorFactory factory = Validation.byDefaultProvider().configure().traversableResolver(new CustomTraversableResolver() ).buildValidatorFactory();
Validator validator = factory.getValidator();
Set<ConstraintViolation<BaseValidationObject>> constraintViolations = Validator.validate(r);

并添加例如@Min(1)或@Length(1,255)到你的财产注释。

constraintViolations变量将包含任何失败的条件。

答案 2 :(得分:-1)

也许您可以尝试删除当前表并在添加这些约束后重新创建它。尝试一些重启。我之前有同样的问题,它的工作原理。不确定这是不是你的情况。