четверг, 15 марта 2018 г.

Как связать независимые таблицы через hibernate.
Пример более содержит сложный случай, когда нужно связать через подстроки полей.

Вкратце: используется Projections.sqlProjection.

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

Criteria c = getSession().createCriteria(SWClass.class, "sw");

DetachedCriteria dc = DetachedCriteria.forClass(Di.class);
dc.setProjection(
        Projections.sqlProjection("
                     SUBSTR(upk,0,INSTR(upk,'/',1,1)-1)  as_id, 
                     SUBSTR(upk, INSTR(upk,0,INSTR(upk,'/',1,1)-1)+1, LENGTH(upk)) as mgmt_ip
         ", new String[]{"asId", "mgmtIp"}, new Type[] { new StringType(), new StringType() }
         )
);

c.add(Subqueries.propertiesIn(new String[]{"sw.asId", "sw.mgmtIp"}, dc));