我有问题将原始SQL查询转换为条件 .
我的原始查询如下所示:
select id,signalid,signalname from signals where
(select count(*) from error_signal where signalid_gen=id) == 0;
Error_Signal(带有额外字段的ManyToMany JoinTable)具有复合PK,其中错误通过primaryKey.error映射,信号通过primaryKey.signal映射
这是获取所有信号的标准
ProjectionList pList = Projections.projectionList();
pList.add(Projections.property(SignalEntity.ID).as(SignalEntity.ID));
pList.add(Projections.property(SignalEntity.SIGNAL_ID).as(SignalEntity.SIGNAL_ID));
pList.add(Projections.property(SignalEntity.SIGNALNAME).as(SignalEntity.SIGNALNAME));
Session session = DatabaseManager.getCurrentSession();
Criteria criteria = session.createCriteria(SignalEntity.class, "signal");
criteria.add(Restrictions.like(SignalEntity.SIGNALNAME, tmpSearch));
criteria.setProjection(pList);
现在我需要应用该限制 . 我没有运气就用DetachedCriteria尝试过它 .
DetachedCriteria countSubquery = DetachedCriteria.forClass(ErrorSignalEntity.class);
countSubquery.createCriteria(ErrorSignalEntity.SIGNAL_PK).add(Restrictions.eqProperty(SignalEntity.ID, "signal." + SignalEntity.ID));
countSubquery.setProjection(Projections.rowCount());
criteria.add(Subqueries.eq(new Integer(0), countSubquery));
我得到的错误是
引起:java.sql.SQLException:[SQLITE_ERROR] SQL错误或缺少数据库(没有这样的列:signalenti1_.id)
1 回答
即使这是一个老问题,但我遇到了同样的要求 . 我最终使用Restrictions.sqlRestriction()函数 .
希望这会帮助那些遇到同样需求的人 .