java - 找不到类型 : java. lang.Object 的 validator

标签 java validation generics

我正在使用javax.validation我的项目中的 API 并在一些开发人员机器和测试服务器上存在名义问题。在其他开发人员机器上,尽管我们使用相同的 Glassfish 版本、IDE 和由 maven 处理的库堆栈,但无法重现此错误。

在调试此问题时,我们怀疑可能是导致问题的原因(我们无法在编译的类内部进行调试,因此“怀疑”) - 我们有一个用于持久实体的接口(interface):

public interface PersistableEntity<T> {

    public T getId();

    public void setId(T id);
}

实现类按“id”字段类型划分:StringBigDecimal@Pattern约束附加到 id 的 getter PersistableEntity<String> 中的字段实现。

如果这是原因,是否可以使用 javax.validation 维持验证并同时使用泛型?

更新 我们决定从 JSR303 转向自定义可配置验证机制。如果有名义问题的人找到了它的解决方案,请告诉我它是哪一个,我会将其标记为答案(欢迎有经验的 SO 用户针对这一困境提供任何其他解决方案)。

最佳答案

我通常使用Persistable Spring Data 的接口(interface),但思路似乎和你自定义的一样。

假设我的 user 表有两个字段:user_id (PK) 和 email (NN)。 JAVA User 实体将有一个 getUserId() getter 和一个 getEmail() getter。

实现 Persistable 接口(interface)时,必须重写 getId() getter,而表 user 不包含 id 字段。您可以通过 @Transient 明确告诉JAVA对应的表不包含这样的字段。注释:

@Entity
@Table(name = "user")
public class User implements Persistable<Integer> {

    // Persistable implementation

    @Override
    @Transient // <-- means "not a database field"
    public Integer getId() {
        return getUserId();
    }

    // user_id

    @Column(name = "user_id", precision = 10)
    @GeneratedValue
    @Id
    public Integer getUserId() {
        return userId;
    }

    // email

    @NotNull
    @Column(name = "email", nullable = false, unique = true)
    public String getEmail() {
        return email;
    }

}

也许这可以解决您的问题。

关于java - 找不到类型 : java. lang.Object 的 validator ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11200778/

相关文章:

jquery - 不引人注目的验证 : Regex validation of optional field

c# - 在 CustomValidation 中返回一个复杂对象而不是 ValidationResult

c# - 替代反射

java - 代码在 Eclipse 中编译但不是 javac : curried lambdas with functional subinterface. 哪个是正确的?

java - Swing JTable 黑客

java - Apache Camel OSGi 容器由 Java DSL 配置?

java - 莫基托 : argument type mismatch?

java - 限制添加除第一级子节点之外的 JTree 节点

java - 在 Mac 上的 Intellij 中创建 SDK : how to type in/paste in path to JDK?

r - 为什么当我将向量传递给默认的 S3 方法并实现向量 S3 方法时,该方法会被调用?