我正在使用javax.validation
我的项目中的 API 并在一些开发人员机器和测试服务器上存在名义问题。在其他开发人员机器上,尽管我们使用相同的 Glassfish 版本、IDE 和由 maven 处理的库堆栈,但无法重现此错误。
在调试此问题时,我们怀疑可能是导致问题的原因(我们无法在编译的类内部进行调试,因此“怀疑”) - 我们有一个用于持久实体的接口(interface):
public interface PersistableEntity<T> {
public T getId();
public void setId(T id);
}
实现类按“id”字段类型划分:String
或BigDecimal
。 @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/