微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

加入多个表条件

如何解决加入多个表条件

我需要获取具有搜索描述的组或该组具有的人名,但在标准中...现在我的标准是这样的,并按组描述返回我的搜索

public List<Group> getList(Authenticated auth,Integer firstRow,Integer maxRows,String search,String category,ColorTag tag) {
        List<Group> lista = new ArrayList();
        try {
            Criteria cr = buildCriteria(auth,firstRow,maxRows,search,category,tag);
            cr.addOrder(Order.asc("description"));
            lista = cr.list();
        } catch (Exception ex) {
            LOG.error(ex.getCause());
        }
        return lista;
    }

(构建标准方法

    private Criteria buildCriteria(Authenticated auth,ColorTag tag) {
        Session session = sessionBuilder.getSession();
        Criteria cr = session.createCriteria(persistentClass);
        if (auth.isPerson()) {
            cr.add(Subqueries.propertyIn("id",getSubQueryGroup(auth.getCodigo())));
        }
        if (search != null) {
            Criterion ctrnName = Restrictions.like("description","%" + search + "%").ignoreCase();
            cr.add(ctrnName);
        }
        if (category != null) {
            Criterion ctrnCategory = Restrictions.eq("category",category);
            cr.add(ctrnCategory);
        }
        if (tag != null) {
            Criterion ctrnTag = Restrictions.eq("tag",tag);
            cr.add(ctrnTag);
        }
        if (firstRow != null && maxRows != null) {
            cr.setFirstResult(firstRow);
            if (maxRows != ILIMITED_ROWS) {
                cr.setMaxResults(maxRows);
            }
        }
        return cr;
    }

这是我需要的搜索sql,但我需要的是 Criteria

select distinct pg.* from person_group pg,person_group_item pgi,person p 
where pg.pg_id = pgi.pgi_group and pgi.pgi_person = p.pe_id and (pg.pg_description like '%Tony%' or p.pe_name like '%Tony%')

这是person实体(有他们的gets和sets但太长了不能放在这里

@Entity
@Table(name = "person_registered")
@PrimaryKeyJoinColumn(name="pe_id")
public class PersonRegistered extends Person {

    private static final long serialVersionUID = -5401362547948278082L;

    @ManyToOne
    @JoinColumn(name = "per_rule")
    private Docrule rule;
    @Column(name = "pe_name",nullable = false,length = 100)
    private String name;
    @OnetoMany(cascade = CascadeType.ALL,orphanRemoval = true,fetch = FetchType.LAZY)
    @JoinColumn(name = "jri_person",referencedColumnName = "pe_id")
    private List<JoinRuleItemPerson> rules = new ArrayList();
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "per_expirydocs")
    private Date expiryDocs;
    @ManyToOne
    @JoinColumn(name = "per_profile")
    private ProfilePerson profile;

这是 group_item 实体

@Entity
@Table(name = "person_group_item")
public class GroupItem extends Auditable {

    private static final long serialVersionUID = -6502688617876419560L;
    
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO,generator = "person_group_item_seq")
    @SequenceGenerator(name = "person_group_item_seq",sequenceName = "person_group_item_seq",allocationSize = 1)
    @Column(name = "pgi_id")
    private int id;
    @Column(name = "pgi_group")
    private int group;  
    @OnetoOne
    @JoinColumn(name = "pgi_person",nullable = false)
    private PersonRegistered person = new PersonRegistered();
    @Column(name = "pgi_owner")
    private boolean owner;
    @OnetoOne
    @JoinColumn(name = "pgi_monitor")
    private PersonRegistered monitor;

    @Override
    public int getId() {
        return id;
    }

这是集团实体

@Entity
@Table(name = "person_group")
public class Group extends Auditable {

    private static final long serialVersionUID = -7145128298547893120L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO,generator = "person_group_seq")
    @SequenceGenerator( name = "person_group_seq",sequenceName = "person_group_seq",allocationSize = 1)
    @Column(name = "pg_id")
    private int id;
    @Column(name = "pg_description",length = 50)
    private String description;
    @OnetoMany(cascade = CascadeType.ALL,orphanRemoval = true)
    @JoinColumn(name = "pgi_group",referencedColumnName = "pg_id")
    private List<GroupItem> items = new ArrayList();
    @Column(name = "pg_category",length = 50)
    private String category;
    @ManyToOne
    @JoinColumn(name = "pg_project")
    private Project project;
    @ManyToOne
    @JoinColumn(name = "pg_rule")
    private Docrule rule;
    @OnetoMany(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
    @JoinColumn(name = "jri_group",referencedColumnName = "pg_id")
    private List<JoinRuleItemGroup> rules = new ArrayList();
    @Column(name = "pg_tag")
    private ColorTag tag = ColorTag.LIGHT;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?