0
我使用OpenPojo自動對我的JPA實體測試。我遇到了與其他實體有關的實體的麻煩。Openpojo拋出BusinessException當一個POJO引用了另一個POJO
例子:
public class Person {
@BusinessKey
private Integer id;
...getters/setters
@Override
public boolean equals(Object obj) {
return BusinessIdentity.areEqual(this, obj);
}
@Override
public int hashCode() {
return BusinessIdentity.getHashCode(this);
}
}
public class Employee {
@BusinessKey
private Integer id;
private Person person;
...getters/setters
@Override
public boolean equals(Object obj) {
return BusinessIdentity.areEqual(this, obj);
}
@Override
public int hashCode() {
return BusinessIdentity.getHashCode(this);
}
}
這裏是我的測試案例:
// Create Rules to validate structure for POJO_PACKAGE
pojoValidator.addRule(new NoPublicFieldsRule());
pojoValidator.addRule(new NoPrimitivesRule());
pojoValidator.addRule(new NoStaticExceptFinalRule());
pojoValidator.addRule(new GetterMustExistRule());
pojoValidator.addRule(new SetterMustExistRule());
pojoValidator.addRule(new NoNestedClassRule());
// Create Testers to validate behaviour for POJO_PACKAGE
pojoValidator.addTester(new DefaultValuesNullTester());
pojoValidator.addTester(new SetterTester());
pojoValidator.addTester(new GetterTester());
for (PojoClass pojoClass : pojoClasses) {
pojoValidator.runValidation(pojoClass);
}
,我發現了以下異常:
com.openpojo.business.exception.BusinessException: Field required and can't be null [PojoFieldImpl
如果我從刪除提及人員工對測試進行分類,不會引發任何異常。除非你使用註釋「@BusinessKey」,你是上市@BusinessIdentity
奧斯曼,@BusinessIdentity是一個錯字,我已經定格在我的問題。我還包括equals和hashCode方法。 –
如果你註釋您的代理鍵(即主鍵),和POJO移交給你的框架,堅持,該框架將嘗試重複數據刪除的條目,它會通過調用hashCode()方法做到這一點,和equals(),這些調用將強制BusinessIdentity嘗試理解如何進行平等 - 這對於空對象是不可能的。最好是註釋一些在數據庫中不能爲空的東西,例如Person的名/姓,或者定義唯一性的其他東西。 –
見:http://docs.jboss.org/hibernate/orm/3.3/reference/en-US/html/persistent-classes.html#persistent-classes-equalshashcode和http://stackoverflow.com/a/2720173/634553 –