日期:2014-05-19  浏览次数:20732 次

急!高分请教hibernate(一对多)多对多查询的问题?!

public class TA extends TObject{

private Set tbs=new HashSet(0);

public Set getTbs() {
return tbs;
}

public void setTbs(Set tbs) {
this.tbs = tbs;
}



}
public class TB extends TObject {

private TA ta;

public TA getTa() {
return ta;
}

public void setTa(TA ta) {
this.ta = ta;
}

}


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="test">
<class name="TA" table="TA">
<id name="id" type="long" column="ta_id">
<generator class="native" />
</id>
<property name="name" column="name" type="string" />
<set name="tbs">
<key column="ta_id"></key>
<one-to-many class="TB" />
</set>
</class>
</hibernate-mapping>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="test">
<class name="TB" table="TB" polymorphism="explicit">
<id name="id" type="long" column="tb_id">
<generator class="native" />
</id>
<property name="name" column="name" type="string" />
<many-to-one name="ta" column="ta_id" class="TA" />
</class>
</hibernate-mapping>

如上面是Java文件和配置文件所示,TObject是提供基本属性(id、name等)及属性的get\set方法的父类,一个TA可以有多个TB,一个TB只能有一个TA。
我的查询语句是“from TA pojo where pojo.tbs.name='tb1'”,可结果报错。
我在网上看到,有人说这样写是正确的,也有人说这样写是错误的,
所以,我想请教下大侠们,这样写到底是正确的还是错误的啊?
如果是正确的,怎么样才能不报错并显示正常查询结果呢?
小弟先谢谢了!
------最佳解决方案--------------------
引用:
我的查询语句是“from TA pojo where pojo.tbs.name='tb1'”,可结果报错。

高版本的Hibernate不能这样查Set了,
要改成这样:

from TA pojo inner join fetch pojo.tbs tb where tb.name='tb1'
------其他解决方案--------------------
网上这种资料那是相当多的,lz还不如自己查下原因咧!
当初我学的时候也这样,你要懂得原理,具体写法自己百度下就行了。
------其他解决方案--------------------
我的查询语句是“from TA pojo where pojo.tbs.name='tb1'”,可结果报错。?

应该把错误贴出来 ,不然怎么给你定位
------其他解决方案--------------------
你自己先测试一下,在你的TA
和TB里都设置哥name属性,看看行不行,如果行的话就说明是继承映射的问题,如果不行的话,那就是配置文件的问题
------其他解决方案--------------------
String hql = "from TA pojo where pojo.tbs.name= :name";
Query q = session.createQuery(hql);
q.setParameter("name", name);
return q.list();
------其他解决方案--------------------
set.name ... 
看你这个查询还不如用sql
select * from ta where ta.taName='';