找不到类型为java.lang.Object的验证器
我在我的项目中使用了找不到类型为java.lang.Object的验证器,java,validation,generics,Java,Validation,Generics,我在我的项目中使用了javax.validationAPI,在一些开发人员机器和测试服务器上出现了名义上的问题。在其他开发人员机器上,尽管我们使用的是maven处理的同一个Glassfish版本、IDE和库堆栈,但这个bug无法重现 调试此问题时,我们怀疑可能是问题的原因(我们无法在编译类内部进行调试,因此“怀疑”)—我们为持久化实体提供了一个接口: public interface PersistableEntity<T> { public T getId();
javax.validation
API,在一些开发人员机器和测试服务器上出现了名义上的问题。在其他开发人员机器上,尽管我们使用的是maven处理的同一个Glassfish版本、IDE和库堆栈,但这个bug无法重现
调试此问题时,我们怀疑可能是问题的原因(我们无法在编译类内部进行调试,因此“怀疑”)—我们为持久化实体提供了一个接口:
public interface PersistableEntity<T> {
public T getId();
public void setId(T id);
}
公共接口PersistableEntity{
公共T getId();
公共无效设置id(T id);
}
实现类按“id”字段类型进行拆分:String
或BigDecimal
。@Pattern
约束附加到PersistableEntity
实现中的id
字段的getter
如果这是原因,是否可以使用javax.validation
维护验证,同时使用泛型
更新
我们决定从JSR303转移到定制的可配置验证机制。如果有人有名义上的问题找到了解决方案,请让我知道它是哪一个,我会将其标记为答案(欢迎有经验的用户提供此难题的任何其他解决方案)。我通常使用Spring数据接口,但这个想法似乎与您的自定义解决方案相同
假设我的user
表有两个字段:user\u id
(PK)和email
(NN)。JAVAUser
实体将有一个getUserId()
getter和一个getEmail()
实现Persistable
接口时,必须重写getId()
getter,而表user
不包含id
字段。通过使用注释,您可以显式地告诉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;
}
}
@实体
@表(name=“user”)
公共类用户实现持久化{
//持久性实现
@凌驾
@Transient//能否提供实现此PersistableEntity接口的实体?()@sp00m,我们有一个大的持久实体层次结构树,最后有相对较大的POJO类,很难在这里列出。这个问题现在已经过时了,但无论如何,谢谢:)我想其他有同样问题的人会发现你的答案很有帮助。