代码之家  ›  专栏  ›  技术社区  ›  MAA

验证Jpa实体:在服务中还是通过生命周期侦听器

  •  6
  • MAA  · 技术社区  · 14 年前

    1. 在EntityListener中,在保存或更新之前将验证实体

    两者都有利弊。 当使用方法2时,测试更容易,因为您可能只是模拟jpa提供者并测试验证逻辑。另一方面,对于1号方法,验证将与@NotNull等验证同时进行。

    我很想知道你如何解决你的项目验证,这是更好的方式去。

    1 回复  |  直到 14 年前
        1
  •  4
  •   Vineet Reynolds    14 年前

    以下是我遵循的一条基本经验法则:

    使用bean验证时,指定 不需要依赖项的规则 在另一个豆子上,得到你的服务

    换句话说,如果您在另一个bean中有一个对bean的引用,请避免放入@NotNull约束。您的服务层最好用于这一点,因为您可以更早地发现冲突,并且处于更合理的位置(因为其他业务验证将假定bean可用)。

    @Entity
    public class User
    {
       @Id
       private int id;
       @NotNull
       private String fullName;
       @NotNull
       private String email;
       private Set<Role> roles; //No bean validation constraints here.
       ...
       public boolean mapRoleToUser(Role role)
       { //Validation is done here. Including checks for a null role.
       }
    
    }
    
    @Entity
    public class Role
    {
      @Id
      private int id;
      @NotNull
      private String name;
    }