Мне нужно следующее:
Root Сущность:
@Entity
@Table(name = "Root")
@FilterDef(name = "entityFilter", parameters = {@ParamDef(name="root_uuid", type = "string"),
@ParamDef(name="Disable_root_Filter", type = "string")})
@Filter(name = "entityFilter", condition = ":Disable_root_Filter = '1' or \"UUID\" in (:root_uuid)")
@NamedQuery(name="findByParameter", query = "Select root.uuid from Root root where (:Disable_param_Filter = '1' or root.some_param in :param)")
public class Root implements Serializable {
@Id
@Column(name = "\"UUID\"", length = 40, nullable = false)
private String uuid;
@Column(name = "\"RootId\"", length = 40, nullable = false)
private String rootId;
@OneToMany(mappedBy = "root")
@JsonIgnore
private List<Item> items;
Предмет Сущность:
@Entity
@Table(name="Item")
@Filter(name = "entityFilter",
condition = "(:Disable_root_Filter = '1' or \"FreightOrderUuid\" in (:root_uuid))")
public class Item implements Serializable {
@Id
@Column(name="\"UUID\"", length=40, nullable=false)
private String uuid;
@Column(name="\"ItemId\"", length=40, nullable=false)
private String itemId;
@Column(name="\"RootUuid\"", length=40, nullable=false)
private String rootUuid;
@ManyToOne()
@JoinColumn(name="\"RootUuid\"", insertable = false, updatable = false)
@JsonIgnore
private Root root;
По сути, я пытаюсь достичь объединения условие между элементом и root
Select * from Item as i inner join Root as r on i.RootUuid = r.UUID where r.some_param in :param
Поскольку все это выполняется с OData, возможно, что запрос может прийти непосредственно к таблице Item, и в этом случае я выполняю NamedQuery
и затем предоставление root_uuid в качестве параметров, но это неэффективно, так как есть выбор в таблице Root для этого условия и затем выбор в таблице Item с этими UUID. Есть ли способ, которым аннотация @Filter
может иметь условие соединения?