67,513
社区成员
发帖
与我相关
我的任务
分享
CREATE TABLE `customers` (
`cid` int(11) NOT NULL auto_increment,
`cname` varchar(20) default NULL,
`cpassword` varchar(20) default NULL,
PRIMARY KEY (`cid`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
CREATE TABLE `customers` (
`cid` int(11) NOT NULL auto_increment,
`cname` varchar(20) default NULL,
`cpassword` varchar(20) default NULL,
PRIMARY KEY (`cid`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
public void findBySubSelect() {
Session session = HibernateSessionFactory.getSession();
Query q = session
.createQuery(" from Customers c where c.cid in (select o.cid from Orders o) ");
List<Customers> list = q.list();
for (Customers c : list) {
System.out.println(c.getCname());
}
Exception in thread "main" org.hibernate.QueryException: could not resolve property: cid of: com.pojos.Orders [ from com.pojos.Customers c where c.cid in (select o.cid from com.pojos.Orders o) ]
at org.hibernate.persister.entity.AbstractPropertyMapping.throwPropertyException(AbstractPropertyMapping.java:43)
at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:37)
at org.hibernate.persister.entity.AbstractEntityPersister.toType(AbstractEntityPersister.java:1265)
at org.hibernate.hql.ast.tree.FromElementType.getPropertyType(FromElementType.java:279)
at org.hibernate.hql.ast.tree.FromElement.getPropertyType(FromElement.java:372)
at org.hibernate.hql.ast.tree.DotNode.getDataType(DotNode.java:539)
at org.hibernate.hql.ast.tree.DotNode.prepareLhs(DotNode.java:221)
at org.hibernate.hql.ast.tree.DotNode.resolve(DotNode.java:172)
at org.hibernate.hql.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:94)
at org.hibernate.hql.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:90)
at org.hibernate.hql.ast.tree.DotNode.resolveSelectExpression(DotNode.java:599)
at org.hibernate.hql.ast.HqlSqlWalker.resolveSelectExpression(HqlSqlWalker.java:736)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectExpr(HqlSqlBaseWalker.java:1881)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectExprList(HqlSqlBaseWalker.java:1821)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectClause(HqlSqlBaseWalker.java:1392)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:553)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.collectionFunctionOrSubselect(HqlSqlBaseWalker.java:4243)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.inRhs(HqlSqlBaseWalker.java:4152)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.comparisonExpr(HqlSqlBaseWalker.java:3835)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1758)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.whereClause(HqlSqlBaseWalker.java:776)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:577)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:281)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:229)
at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:218)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:158)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:109)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:75)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:54)
at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:71)
at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1583)
at com.test.Test2.findBySubSelect(Test2.java:119)
at com.test.Test2.main(Test2.java:136)
Query q = session
.createQuery(" from Customers c where c.cid in (select c.cid from c.orderses) ");
<hibernate-mapping>
<class name="com.pojos.Customers" table="customers" catalog="hbn">
<id name="cid" type="java.lang.Integer">
<column name="cid" />
<generator class="identity" />
</id>
<property name="cname" type="java.lang.String">
<column name="cname" length="20" />
</property>
<property name="cpassword" type="java.lang.String">
<column name="cpassword" length="20" />
</property>
<set name="orderses" inverse="true">
<key>
<column name="cid" />
</key>
<one-to-many class="com.pojos.Orders" />
</set>
</class>
</hibernate-mapping>
<hibernate-mapping>
<class name="com.pojos.Orders" table="orders" catalog="hbn">
<id name="oid" type="java.lang.Integer">
<column name="oid" />
<generator class="identity" />
</id>
<many-to-one name="customers" class="com.pojos.Customers" fetch="select">
<column name="cid" />
</many-to-one>
<property name="odate" type="java.util.Date">
<column name="odate" length="10" />
</property>
</class>
</hibernate-mapping>
就是hql这里不会写。。
select * from customers where cid in (select cid from orders);