当POJO引用另一个POJO时,Openpojo抛出BusinessException



我正在使用OpenPojo来自动测试我的JPA实体。我遇到了实体引用其他实体的问题。

示例:

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

如果我从Employee类中删除对Person的引用,则测试不会引发任何异常。

OpenPojo不会抛出此异常,除非您使用注释"@BusinessKey",否则您将列出@BusinessIdentity。此外,您没有显示您的equals和hashCode或toString实现,"BusinessIdentity"在哪里被引用?

另一件需要注意的事情是,@BusinessKey应该用于注释实际的业务字段,而不是DB代理Id(又名主键)。

最新更新