Backport of HV-1057 (https://hibernate.atlassian.net/browse/HV-1057) Assuming the following public interface Min {} public interface Max extends Min {} @GroupSequence({Max.class, A.class}) public class A { @NotNull(groups=Max.class) public String foo; @NotNull(groups=Min.class) public String bar; } public class B { @NotNull(groups=Max.class) public String foo; @NotNull(groups=Min.class) public String bar; } The following code returns as expected assert validator.validate(new B(), Max.class, B.class).size() == 2 But the following fails // bar is ignored as Min is not considered when Max is evaluated for default sequence // so size == 1 assert validator.validate(new A(), Max.class, A.class).size() == 2 Note that the actual test used group sequence provider but that's not relevant I think.
Group sequences may contain groups which are inherited from another group: public class Try { @NotNull(message = "field1", groups = BaseComponent.class) public String field1; @NotNull(message = "field2", groups = Component.class) public String field2; @NotNull(message = "field3", groups = OtherComponent.class) public String field3 = ""; public interface BaseComponent {} public interface Component extends BaseComponent {} public interface OtherComponent {} @GroupSequence({ Component.class, OtherComponent.class }) public interface GlobalCheck {} } A validation validator.validate( new Try(), Try.GlobalCheck.class ); should yield the two constraints on field1 and field2 (as both constraints are in the Component group, which extends the BaseComponent group. The current implementation returns only the constraint on field2, though. The reason being that all three groups which form the sequence are "flattened out", thus loosing the information that Component and BaseComponent need to be considered as one atomic unit here.
Verified with EAP 6.4.9.CP.CR2
Retroactively bulk-closing issues from released EAP 6.4 cummulative patches.