读书人

hibernate一对多查询小弟我要崩溃啦

发布时间: 2012-01-06 22:55:18 作者: rapoo

hibernate一对多查询,我要崩溃啦!!!!
数据库中分别有Cityscenery(城市表)Business(商业区表)。一个城市中可以有多个商业区。因为这个项目中不可以删除任何东西,所以我没有建立住外键关联。商业区中记录的是城市的ID但是我却要显示城市的名称。现在的问题是,如果我不建立
many-to-one,显示城市的ID可以正确显示,但是我建立many-to-one想要显示城市名称的时候查询的时候返回的List中全部都是null.代码如下: 我用的是tomcat连接池,会是因为连接池中的最大连接数太小吗?
Business.hbm.xml:
<hibernate-mapping>
<class name="po.Business" table="business" catalog="hotel">
<id name="businessId" type="java.lang.Integer">
<column name="Business_Id" />
<generator class="increment" />
</id>
<many-to-one name="city" class="po.Business">
<column name="cityId"/>
</many-to-one>
<property name="businessName" type="java.lang.String">
<column name="Business_name" length="50" />
</property>
<property name="businessEn" type="java.lang.String">
<column name="Business_en" length="50" />
</property>
<property name="businessControl" type="java.lang.String">
<column name="Business_control" length="30" />
</property>
<property name="businessDate" type="java.util.Date">
<column name="Business_date" length="0" />
</property>
<property name="businessSign" type="java.lang.Integer">
<column name="Business_sign" />
</property>
<property name="businessRemark" type="java.lang.String">
<column name="Business_remark" length="250" />
</property>
</class>
</hibernate-mapping>

Business.java:
public class Business implements java.io.Serializable {

// Fields
private Integer businessId;
private Cityscenery city;
private String businessName;
private String businessEn;
private String businessControl;
private Date businessDate;
private Integer businessSign;
private String businessRemark;

// Constructors

/** default constructor */
public Business() {
}

public Business(Cityscenery city, String businessName, String businessEn,
String businessControl, Date businessDate, Integer businessSign,
String businessRemark) {
this.city = city;
this.businessName = businessName;
this.businessEn = businessEn;
this.businessControl = businessControl;
this.businessDate = businessDate;
this.businessSign = businessSign;
this.businessRemark = businessRemark;
}
public Integer getBusinessId() {
return this.businessId;
}
public void setBusinessId(Integer businessId) {
this.businessId = businessId;
}
public Cityscenery getCity() {
return city;
}
public void setCity(Cityscenery city) {
this.city = city;
}
public String getBusinessName() {
return this.businessName;
}
public void setBusinessName(String businessName) {
this.businessName = businessName;
}
public String getBusinessEn() {
return this.businessEn;
}
public void setBusinessEn(String businessEn) {
this.businessEn = businessEn;
}
public String getBusinessControl() {
return this.businessControl;
}
public void setBusinessControl(String businessControl) {


this.businessControl = businessControl;
}
public Date getBusinessDate() {
return this.businessDate;
}
public void setBusinessDate(Date businessDate) {
this.businessDate = businessDate;
}
public Integer getBusinessSign() {
return this.businessSign;
}
public void setBusinessSign(Integer businessSign) {
this.businessSign = businessSign;
}
public String getBusinessRemark() {
return this.businessRemark;
}
public void setBusinessRemark(String businessRemark) {
this.businessRemark = businessRemark;
}
}
action:
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
BusinessQuarterForm businessQuarterForm = (BusinessQuarterForm) form;// TODO Auto-generated method stub
ActionForward forward = null;
Session session = HibernateSessionFactory.getSession();
List list = session.createQuery("From Business").list();
request.getSession().setAttribute("list", list);
Iterator it = list.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
forward = mapping.findForward("sucess");
return forward;
}

大家帮帮忙啊。

[解决办法]
用的hibernate什么版本,是不是因为延迟加载的问题
[解决办法]
牺牲性能达到目的解决方法
<many-to-one name="city" class="po.Business" lazy="false">
<column name="cityId"/>
</many-to-one>

稍微好点的:
<many-to-one name="city" class="po.Business" fetch="join">
<column name="cityId"/>
</many-to-one>


如果<column name="cityId" not-null="true"/> inner join
else outer join
[解决办法]
<many-to-one name="city" class="po.Business">
怎么class还是Business
[解决办法]

探讨
<many-to-one name="city" class="po.Business">
怎么class还是Business

读书人网 >Java Web开发

热点推荐