Левое внешнее соединение в запросе Ebean


У меня такая же проблема, как и у других (не решенные вопросы)! когда я использую метод fetch('userWorkItems') сгенерированный SQL-запрос будет иметь как левое внешнее соединение и присоединиться к более чем TbUserWorkItem. мне нужно быть только левым внешним соединением над таблицей TbUserWorkItem! как я могу решить эту проблему?

Моя первая модель:

@Entity
@Table(name = "TbWorkItem", schema = "mySchema")
public class TbWorkItem extends Model {

    @Id
    public Integer id;

    public Integer code;

    /* some other properties here */

    @JsonIgnore
    @OneToMany//(mappedBy = "workItem")
    public List<TbUserWorkItem> userWorkItems;

    public static Finder<Byte, TbWorkItem> find = new Finder(Byte.class, TbWorkItem.class);

    public static List<TbWorkItem> all(Integer systemId, Integer workingUserId) {

/*        return find
                .fetch("userWorkItems")
                .where()
                .eq("system.id", systemId).eq("workItemInformationType.code", 1)
                .or(
                        Expr.eq("publicWorkItemYesNo.code", 1),
                        Expr.and(Expr.eq("publicWorkItemYesNo.code", 2), Expr.eq("userWorkItems.workingUserId", workingUserId)))
                .findList();
*/

        return find
                .where()
                .eq("system.id", systemId).eq("workItemInformationType.code", 1)
                .or(
                        Expr.eq("publicWorkItemYesNo.code", 1),
                        Expr.and(Expr.eq("publicWorkItemYesNo.code", 2), Expr.eq("userWorkItems.workingUserId", workingUserId)))
                .findList();

    }
}

И вторая модель:

@Entity
@Table(name="TbUserWorkItem",schema="mySchema")
public class TbUserWorkItem extends Model {

    @Id
    public Integer id;

    /* some properties here */

    @ManyToOne
    @JoinColumn(name="WorkItemId")
    public TbWorkItem workItem;


    public static Finder<Integer,TbUserWorkItem> find=new Finder(Integer.class,TbUserWorkItem.class);

   /*some methods here*/

}
1 2

1 ответ:

После некоторой работы и гугления я вынужден был использовать строковый запрос, используя сырое выражение, подобное этому:

        return Ebean.find(TbWorkItem.class)
            .where().raw(
            "system.id=? and workItemInformationType.code =1 and (publicWorkItemYesNo.code=1 or userWorkItems.workingUserId = ?)",new Object[]{systemId,workingUserId})
            .findList();
}

Возможно, помочь другим! но я приветствую любые ответы, которые используют запрос ebean для решения проблемы, а не сырую строку.