While reading the hibernate docs I've seen several times the use of static classes.
As an example here is an excerpt of the code in the documentation:
@Entity(name = "SystemUser")
public static class SystemUser {
    @EmbeddedId
    private PK pk;
    private String name;
    //Getters and setters are omitted for brevity
}
@Embeddable
public static class PK implements Serializable {
    private String subsystem;
    private String username;
    public PK(String subsystem, String username) {
        this.subsystem = subsystem;
        this.username = username;
    }
    private PK() {
    }
    @Override
    public boolean equals(Object o) {
        if ( this == o ) {
            return true;
        }
        if ( o == null || getClass() != o.getClass() ) {
            return false;
        }
        PK pk = (PK) o;
        return Objects.equals( subsystem, pk.subsystem ) &&
                Objects.equals( username, pk.username );
    }
    @Override
    public int hashCode() {
        return Objects.hash( subsystem, username );
    }
}
I thought top level static classes where not allowed in Java. What is the reason for indicating this classes as static?
