Example关联查询

	

OneToManyUser和TAddress之间是一个双向一对多的关系,在其他的测试中没有任何问题,但是当我想根据一个TAddress对象来查询数据库中有OneToManyUser的address所匹配的数据时,总是出现以下SQL语句select this_.id as id5_0_, this_.name as name5_0_, this_.age as age5_0_ from otmuser this_ where (1=1)
明显这条语句会返回全部otmuser表中的信息,代码如下:
OneToManyUser user2 = new OneToManyUser();
TAddress address = new TAddress();
address.setAddress("ShangHai3");
user2.addAddresses(address);
List list5 =
session.createCriteria(OneToManyUser.class).add(Example.create(user2)).list();
for(int i = 0; i < list5.size(); ++i){
System.out.println(((OneToManyUser)list5.get(i)).getId());
}

其中addAddresses()方法是
public void addAddresses(TAddress address){
address.setUser(this);
this.getAddresses().add(address);
}
希望一下

声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。若作者同意转载,必须以超链接形式标明文章原始出处和作者。
相关文章:      

推荐链接:      

为什么没人回答呢?Example的查询难道不能对私有成员对象进行查询的吗?

不能对子表进行查询(那需要join)
如果是同一个表中的子字段可以
PS:你写的语句很不清楚很难明白
要是想让人明白重写首帖

多谢指教!我明白你的意思了
PS:楼上所说的不清楚是指我写的代码还是我之前的描述?
如果是描述的话那是有可能,我的语文很一般,代码的话我觉得好象没什么问题

代码我刚刚试完所以看到你写的有印象
描术是一点也没看明白

我刚才看了Example的API,似乎可以关联表的
List results = session.createCriteria(Parent.class)
.add( Example.create(parent).ignoreCase() )
.createCriteria("child")
.add( Example.create( parent.getChild() ) )
.list();
这是API写的,但是我试了一下, 报
Exception in thread "main" java.lang.ClassCastException: java.util.HashSet
at org.hibernate.criterion.Example.getEntityMode(Example.java:247)
at org.hibernate.criterion.Example.toSqlString(Example.java:177)
at org.hibernate.loader.criteria.CriteriaQueryTranslator.getWhereCondition(CriteriaQueryTranslator.java:333)
at org.hibernate.loader.criteria.CriteriaJoinWalker.<init>(CriteriaJoinWalker.java:82)
at org.hibernate.loader.criteria.CriteriaLoader.<init>(CriteriaLoader.java:67)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1514)
at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)
at org.hibernate.impl.CriteriaImpl$Subcriteria.list(CriteriaImpl.java:458)
at com.hibernate.lockandquery.ComplexQuery.main(ComplexQuery.java:35)
什么莫名
 

你可能感兴趣的:(java,thread,sql,Hibernate)