我有个hibernate多表查询,总是返回空值

zizhu114 2008-06-03 10:54:15
Branch.hbm.xml
<hibernate-mapping package="org.appfuse.model">
<class name="Branch" table="tb_branch">
<id name="id" type ="int"><column name="id" /> <generator class="identity"/> </id>
<property name="name"> <column name="name"/> </property>
<property name="tel"> <column name="tel"/> </property>
<property name="memo"> <column name="memo"/></property>
<set name="damage" inverse="true"> <key column="branchid" />
<one-to-many class="Damage"/> </set></class>
</hibernate-mapping>
Damage.hbm.xml
<hibernate-mapping package="org.appfuse.model">
<class name="Damage" table="tb_damage">
<id name="id" type ="int"> <column name="id" /> <generator class="identity"/> </id>
<property name="goodsid"> <column name="goodsid"/> </property>
<property name="damagenum"> <column name="damagenum"/> </property>
<property name="principal"> <column name="principal"/> </property>
<property name="username"> <column name="username"/></property>
<many-to-one name="branch" column="branchid" class="Branch" lazy="false"/> </class>
</hibernate-mapping>
Branch.java
public class Branch extends BaseObject {
private int id; private String memo; private String name; private String tel;
private Set<Damage> damage=new HashSet<Damage>(0);
public Branch(){}
public int getId() { return id; }
public void setId(int id) { this.id = id; }
public void setTel(String tel) { this.tel = tel; }
public void setName(String name) { this.name = name; }
public void setMemo(String memo) { this.memo = memo; }
public String getMemo() { return memo; }
public String getName() { return name; }
public String getTel() { return tel; }
public Set<Damage> getDamage() { return this.damage; }
public void setDamage(Set<Damage> damage) { this.damage = damage; }}
Damage.java
private int damagenum;
private int goodsid; private int id; private String principal; private String username;
private Branch branch; public Damage(){}
public void setUsername(String username) { this.username = username; }
public void setPrincipal(String principal) { this.principal = principal; }
public void setId(int id) { this.id = id; }

public void setGoodsid(int goodsid) { this.goodsid = goodsid; }
public void setDamagenum(int damagenum) { this.damagenum = damagenum; }
public int getDamagenum() { return damagenum; }
public int getGoodsid() { return goodsid; }
public int getId() { return id; }
public String getPrincipal() { return principal; }
public String getUsername() { return username; }
public void setBranch(Branch branch) { this.branch = branch; }
public Branch getBranch() { return this.branch; }
查询语句:
Return getHibernateTemplate().find(“select b.name from Damage d inner join Branch b on d.branchid=b.id”)
单表查询可以,联合查询总空值
...全文
97 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zizhu114 2008-06-05
  • 打赏
  • 举报
回复
ssh架构中,我单表查询做得很好,用spring的hibernate模版做多表查询总是不行,
出现错误
javax.servlet.ServletException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/hibernate_context.xml]: Invocation of init method failed; nested exception is org.hibernate.InvalidMappingException: Could not parse mapping document from input stream
org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:535)
这如何做,如你回答对。
我会设法多给你分,我承诺
whetu 2008-06-03
  • 打赏
  • 举报
回复
你下面这句话有问题:
Return getHibernateTemplate().find(“select b.name from Damage d inner join Branch b on d.branchid=b.id”)
getHibernateTemplate().find()的参数应该是一个hql语句,而你这里用了一个sql 语句。hql里面,应该
用java类的属性名,而不是数据库表的字段名。正确的应该这么写:
Return getHibernateTemplate().find(“select b.name from Damage d inner join Branch b on d.branch.id=b.id”)
或者
Return getHibernateTemplate().find(“select b.name from Damage d inner join Branch b on d.branch=b”)

67,538

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧