0

我只是发现我的休眠验证不起作用。我正在使用带有注释的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.....");

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

4

3 回答 3

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 变量将包含任何失败的条件。

于 2012-07-11T11:48:37.933 回答
0

验证不是为什么您的数据没有保存的问题。session.close();关闭会话,但您需要在此之前调用 flush 。这是使用会话成功保存数据的正确顺序:

flush the session
commit the transaction
close the session
handle exceptions

查看文档

于 2012-07-11T09:32:41.983 回答
-1

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

于 2016-07-22T11:40:47.357 回答