Левое внешнее соединение в запросе 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 ответ:
После некоторой работы и гугления я вынужден был использовать строковый запрос, используя сырое выражение, подобное этому:
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 для решения проблемы, а не сырую строку.