アノテーション内にメタデータ構造を作成する際に問題が発生しています。Hibernateエンティティ属性の特別な属性を定義するためにアノテーションを使用していますが、どこでも使用できる可能性があります。これらの構造を表す条件を作成したいと思います。
attribute1 = ...
OR
(attribute2 = ...
AND
attribute3 = ...)
問題は、このアノテーションを使用して「ツリー」構造を定義する必要があることです。これが私が到達したいいくつかのデザインです:
@interface Attribute {
... some attributes ...
}
@interface LogicalExpression {
}
@interface OR extends LogicalExpression {
Attribute[] attributes() default {};
LogicalExpression logicalExpressions() default {};
}
@interface AND extends LogicalExpression {
Attribute[] attributes() default {};
LogicalExpression logicalExpressions() default {};
}
@interface ComposedCondition {
Attribute[] attributes() default {};
LogicalExpression logicalExpressions() default {};
}
この例に従って使用したいこれらすべての注釈:
public class Table {
@ComposedCondition(logicalExressions = {
@OR(attributes = {@Attribute(... some settings ...)},
logicalExpressions = {
@AND(attributes = {@Attribute(...), @Attribute(...)})
})
}
private String value;
}
上記のアノテーション定義で定義した方法での継承は不可能であることを私は知っています。しかし、注釈をAND、ORを1つの「家族」に含めるにはどうすればよいでしょうか。