Условие соединения в аннотации Hibernate @Filter - PullRequest
0 голосов
/ 21 апреля 2020

Мне нужно следующее:

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 может иметь условие соединения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...