As I review the Service and corresponding Queries code, I am reminded that there is no compiler check to ensure that the column name  specified in the query string passed to `createQuery() ` is the same as the one passed to the `addParameter(<string>)` method (I assume the sql queries themselves will not be compiled until runtime). 

A safeguard against this could be:

    public PermissionEntity getPermissionBy(UUID id)
    {
        String idField = "id";

        return sqlConnection.createQuery(permissionQueries.selectById(idField))
            .addParameter(idField, id)
            .setAutoDeriveColumnNames(true)
            .executeAndFetchFirst(PermissionEntity.class);
    }

    public String selectById(String idField)
    {
        return "SELECT * FROM profiles WHERE id = :" + idField;
    }

I don't feel super strongly about this, but am curious as to your thoughts.