验证javax.persistance注释?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了验证javax.persistance注释?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2430字,纯文字阅读大概需要4分钟。
内容图文
我想以编程方式检查对象是否满足其javax.persistance注释所指定的内容.我正在为Hibernate DAO创建一个fake用于单元测试.然而,有一个缺陷没有被单元测试捕获,因为假的没有检查@Column注释中字段的长度,Hibernate做了.
显然,我可以添加代码来手动检查这些字段,但我宁愿使用一种方法来检查所有这些字段,因此如果值发生变化,它将是最新的.我尝试使用javax.validation.Validator和Apache Bean Validation,但Validator没有发现任何问题.是否有一个函数可以在不调用完整的Hibernate会话的情况下进行测试?
为了清楚起见,我感兴趣的是模拟Hibernate的“类型检查”而不是bean验证本身,这只是我试图用来执行检查的东西.
import javax.validation.Validation;
@Test( expected = IllegalArgumentException.class )
public shouldComplainBecauseOfNullsOrLength(){
AclPermission acl = new AclPermission();
acl.setTarget( "I am way tooo long for this field . " );
if( ! Validation.buildDefaultValidatorFactory().getValidator().validate( acl ).isEmpty() )
throw new IllegalArgumentException();
fail( "Should have had a problem with null values." );
}
目前使用此代码,我宁愿用更强大的东西替换.
for( String fieldName : new String[]{ "target", "action", "recipient" } ){
final Field field = AclPermission.class.getDeclaredField( fieldName );
field.setAccessible( true );
final Column fieldConstraints = field.getAnnotation( Column.class );
final String fieldValue = (String) field.get( acl );
if( ! fieldConstraints.nullable() && fieldValue == null )
throw new NullPointerException( fieldName + " is null." );
else if( fieldValue != null && fieldValue.length() > fieldConstraints.length() )
throw new IllegalArgumentException( fieldName + " is too long " + fieldValue.length() + "/" + fieldConstraints.length() );
}
这是我要验证的类:
public class AclPermission{
@Id
@Column(name="ID", nullable=false)
@GeneratedValue(generator="system-uuid")
@GenericGenerator(name="system-uuid", strategy = "uuid")
private String id;
@Column(name="TARGET", nullable=false, length=6)
private String target;
@Column(name="ACTION", nullable=false, length=10)
private String action;
@Column(name="RECIPIENT", nullable=false, length=6)
private String recipient;
//... getters and setters go here
}
解决方法:
@Column注释上的属性nullable和length用于生成模式.它们用于告诉持久性提供程序如何设置数据库.它们与运行时验证无关.如果要使用JSR-303验证器,则需要使用JSR-303注释.
@Column(name="TARGET", nullable=false, length=6)
@javax.validation.constraints.NotNull
@javax.validation.constraints.Size(max=6)
private String target;
等等
内容总结
以上是互联网集市为您收集整理的验证javax.persistance注释?全部内容,希望文章能够帮你解决验证javax.persistance注释?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。