0

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 への参照を削除すると、例外がスローされることなくテストが実行されます。

4

1 に答える 1

2

注釈「@BusinessKey」を使用しない限り、OpenPojo はこの例外をスローしません。@BusinessIdentity をリストしています。また、 equals と hashCode または toString の実装を表示していません。「BusinessIdentity」はどこで参照されていますか?

注意すべきもう 1 つのことは、@BusinessKey は、DB サロゲート Id (別名プライマリ キー) ではなく、実際のビジネス フィールドに注釈を付けるために使用されることになっています。

于 2013-10-04T03:11:27.830 に答える