Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate sql查询到条件_Java_Hibernate_Criteria - Fatal编程技术网

Java Hibernate sql查询到条件

Java Hibernate sql查询到条件,java,hibernate,criteria,Java,Hibernate,Criteria,我无法将原始sql查询转换为条件 我的原始查询如下所示: select id,signalid,signalname from signals where (select count(*) from error_signal where signalid_gen=id) == 0; Error_信号(带有额外字段的manytomy JoinTable)有一个复合PK,其中错误通过primaryKey.Error映射,信号通过primaryKey.Signal映射 这是我获取所有信号的标准 P

我无法将原始sql查询转换为条件

我的原始查询如下所示:

select id,signalid,signalname from signals where 
(select count(*) from error_signal where signalid_gen=id) == 0;
Error_信号(带有额外字段的manytomy 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 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\u ERROR]sql错误或丢失 数据库(没有这样的列:signalenti1.id)


即使这是一个老问题,但我遇到了同样的要求。最后,我使用了Restrictions.sqlRestriction()函数

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));
// *** Solution: add the special count check here ****
criteria.add(Restrictions.sqlRestriction("(select count(*) from error_signal where signalid_gen={alias}.id) == 0"));
criteria.setProjection(pList);

希望这将有助于遇到同样需求的人。

您在类中为Id声明了@Id吗?是的,SignalEntity.Id用Id标记,ErrorSignalEntity.primaryKey用EmbeddedId标记,因为它属于ErrorSignalPK(复合PK)类型,至少向我们显示您的实体和生成的SQL不起作用。相应的DDL也会有所帮助。