我发现我的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.....");
它正在插入没有值的记录。我应该添加新的东西。?
答案 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)
也许您可以尝试删除当前表并在添加这些约束后重新创建它。尝试一些重启。我之前有同样的问题,它的工作原理。不确定这是不是你的情况。