hibernate报错:could not resolve property: roomTypes of:

sliwey 2013-08-07 10:20:00
这是异常信息:

could not resolve property: roomTypes of: com.qlw.hotelmanagenemt.model.Rooms [select r.roomId,r.roomTypes.typeName,r.roomStatus from com.qlw.hotelmanagenemt.model.Rooms r]


用的是注解的方式
Rooms跟RoomTypes是多对一的关系
多方:

package com.qlw.hotelmanagenemt.model;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;

import javax.persistence.Id;


@Entity
public class Rooms {

private int id;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}


private RoomTypes roomTypes;

@ManyToOne(cascade=CascadeType.ALL,targetEntity = RoomTypes.class)
@JoinColumn(name="typeId",updatable=false,insertable=false)
public RoomTypes getRoomtypes() {
return roomTypes;
}
public void setRoomtypes(RoomTypes roomTypes) {
this.roomTypes = roomTypes;
}

private int typeId;
private String roomId;
private int roomStatus;


public int getTypeId() {
return typeId;
}
public void setTypeId(int typeId) {
this.typeId = typeId;
}
public String getRoomId() {
return roomId;
}
public void setRoomId(String roomId) {
this.roomId = roomId;
}
public int getRoomStatus() {
return roomStatus;
}
public void setRoomStatus(int roomStatus) {
this.roomStatus = roomStatus;
}

}


一方:
package com.qlw.hotelmanagenemt.model;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;

import javax.persistence.Id;


@Entity
public class RoomTypes {

private int id;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}

private String typeName;
private int bedNum;
private String bedType;
private int wifi; //0表示没有;1表示有
private String area;
private int price;
private String remark;

public String getTypeName() {
return typeName;
}
public void setTypeName(String typeName) {
this.typeName = typeName;
}
public int getBedNum() {
return bedNum;
}
public void setBedNum(int bedNum) {
this.bedNum = bedNum;
}
public String getBedType() {
return bedType;
}
public void setBedType(String bedType) {
this.bedType = bedType;
}
public int getWifi() {
return wifi;
}
public void setWifi(int wifi) {
this.wifi = wifi;
}
public String getArea() {
return area;
}
public void setArea(String area) {
this.area = area;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}

}


这是出错的地方:

public List<RoomInfo> getRooms() {
return (List<RoomInfo>)hibernateTemplate.find("select r.roomId,r.roomTypes.typeName,r.roomStatus from Rooms r");
}


RoomInfo是一个DTO
package com.qlw.hotelmanagenemt.model;



public class RoomInfo {

private int typeId;
private String roomId;
private int roomStatus;
private String typeName;
private int bedNum;
private String bedType;
private int wifi; //0表示没有;1表示有
private String area;
private int price;
private String remark;


public int getTypeId() {
return typeId;
}
public void setTypeId(int typeId) {
this.typeId = typeId;
}
public String getRoomId() {
return roomId;
}
public void setRoomId(String roomId) {
this.roomId = roomId;
}
public int getRoomStatus() {
return roomStatus;
}
public void setRoomStatus(int roomStatus) {
this.roomStatus = roomStatus;
}
public String getTypeName() {
return typeName;
}
public void setTypeName(String typeName) {
this.typeName = typeName;
}
public int getBedNum() {
return bedNum;
}
public void setBedNum(int bedNum) {
this.bedNum = bedNum;
}
public String getBedType() {
return bedType;
}
public void setBedType(String bedType) {
this.bedType = bedType;
}
public int getWifi() {
return wifi;
}
public void setWifi(int wifi) {
this.wifi = wifi;
}
public String getArea() {
return area;
}
public void setArea(String area) {
this.area = area;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}

}


新人求帮助!!!
...全文
1831 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
sliwey 2013-08-07
  • 打赏
  • 举报
回复
引用 4 楼 fangmingshijie 的回复:
错误还是一样?
是的。。按照我自己的方法改掉了,貌似用没用注解都能这样做。。。我把ManyToOne这个注解删掉试试。。。
sliwey 2013-08-07
  • 打赏
  • 举报
回复
OK。。自己解决了。。。 改了hql:
	public List<RoomInfo> getRooms() {
		return (List<RoomInfo>)hibernateTemplate.find("select new com.qlw.hotelmanagement.dto.RoomInfo(r.roomId,rt.typeName,r.roomStatus) from Rooms r,RoomTypes rt where r.typeId=rt.id");
	}
另外在RoomInfo里加上构造方法:
package com.qlw.hotelmanagement.dto;



public class RoomInfo {
	
	private String roomId;
	private String typeName;
	private int roomStatus;
	
	public RoomInfo(String roomId, String typeName, int roomStatus) {
		this.roomId = roomId;
		this.typeName = typeName;
		this.roomStatus = roomStatus;
	}
	public String getRoomId() {
		return roomId;
	}
	public void setRoomId(String roomId) {
		this.roomId = roomId;
	}
	public String getTypeName() {
		return typeName;
	}
	public void setTypeName(String typeName) {
		this.typeName = typeName;
	}
	public int getRoomStatus() {
		return roomStatus;
	}
	public void setRoomStatus(int roomStatus) {
		this.roomStatus = roomStatus;
	}
	
}
前端就能取到数据了。。。
  • 打赏
  • 举报
回复
错误还是一样?
sliwey 2013-08-07
  • 打赏
  • 举报
回复
我把hql改成这样了。。虽然不报错 但是前端取不到数据
public List<RoomInfo> getRooms() {
		return (List<RoomInfo>)hibernateTemplate.find("select r.roomId,rt.typeName,r.roomStatus from Rooms r,RoomTypes rt where r.typeId=rt.id");
	}
action中的方法
	public String list() {
		this.roomInfo = this.rm.getRooms();	
//		Iterator<RoomInfo> it = roomInfo.iterator();
//		while(it.hasNext()) {
//			System.out.println(it.next().getRoomId());	
//		}
//	
//		if(roomInfo != null) {
//			Object[] obj =roomInfo.toArray();
//			System.out.println(obj[0].toString());
//			
//		}
//			
		return "list";
	}
前端JSP:
    <s:iterator value="roomInfo">
    	<tr>
    	<td nowrap="nowrap" align="center"><s:property value="roomId"/></td>
    	<td nowrap="nowrap" align="center"><s:property value="typeName"/></td>
 <!--    	<td nowrap="nowrap" align="center"><s:if test="typeId == 1">单人间</s:if>
    		<s:elseif test="typeId == 2">双人间</s:elseif>
    		<s:else>套间</s:else></td>
   -->  
    	<td nowrap="nowrap" align="center"><s:if test="roomStatus == 1">售出</s:if>
    		<s:else>空闲</s:else></td>   	
    	</tr>
    </s:iterator>
  </table>  
  <form action="room!list.action">
    	<input type="submit" value="刷新" />
  </form>
就是前端取不到数据。。。求解。。。
sliwey 2013-08-07
  • 打赏
  • 举报
回复
引用 1 楼 fangmingshijie 的回复:
private RoomTypes roomTypes; @ManyToOne(cascade=CascadeType.ALL,targetEntity = RoomTypes.class) @JoinColumn(name="typeId",updatable=false,insertable=false) public RoomTypes getRoomtypes() { return roomTypes; } public void setRoomtypes(RoomTypes roomTypes) { this.roomTypes = roomTypes; } T应该大写了。保持一致。
已经改过了。。。还是没用。。。
  • 打赏
  • 举报
回复
private RoomTypes roomTypes; @ManyToOne(cascade=CascadeType.ALL,targetEntity = RoomTypes.class) @JoinColumn(name="typeId",updatable=false,insertable=false) public RoomTypes getRoomtypes() { return roomTypes; } public void setRoomtypes(RoomTypes roomTypes) { this.roomTypes = roomTypes; } T应该大写了。保持一致。
sliwey 2013-08-07
  • 打赏
  • 举报
回复
此贴终结。。。。分数都给你了
引用 14 楼 fangmingshijie 的回复:
from xxx
sliwey 2013-08-07
  • 打赏
  • 举报
回复
引用 14 楼 fangmingshijie 的回复:
from xxx
能详细点吗?或者说 我一开始贴的代码 哪里有问题。
  • 打赏
  • 举报
回复
from xxx
sliwey 2013-08-07
  • 打赏
  • 举报
回复
引用 12 楼 fangmingshijie 的回复:
多对一就manytoone
那hql怎么写? 比如 rooms 是多方 roomtypes是一方,要查询的是两张表中的所有字段。
  • 打赏
  • 举报
回复
多对一就manytoone
sliwey 2013-08-07
  • 打赏
  • 举报
回复
引用 10 楼 fangmingshijie 的回复:
@Entity public class RoomTypes { 比如这个,如果不知道表名,会自动创建一个表名为roomtypes的表,你自己的如果和这个名字一样,且属性也一样(属性创建和表名创建方式一样),不会创建,如果不同,会自动修改为你实体类定义的字段名的,创建方式写update
那这样的话,应该也没问题。。那hibernate的多对一映射是怎么弄的呢?hql怎么写?
  • 打赏
  • 举报
回复
@Entity public class RoomTypes { 比如这个,如果不知道表名,会自动创建一个表名为roomtypes的表,你自己的如果和这个名字一样,且属性也一样(属性创建和表名创建方式一样),不会创建,如果不同,会自动修改为你实体类定义的字段名的,创建方式写update
sliwey 2013-08-07
  • 打赏
  • 举报
回复
引用 8 楼 fangmingshijie 的回复:
会自动创建表,不会创建数据库。
那我自己创建的表 对hibernate的管理会不会有影响?
  • 打赏
  • 举报
回复
会自动创建表,不会创建数据库。
sliwey 2013-08-07
  • 打赏
  • 举报
回复
引用 4 楼 fangmingshijie 的回复:
错误还是一样?
我把Rooms这个类中的ManyToOne注解删掉了。。。也是可以的。。 hibernate是不是会自动创建数据库和表? 我的数据库和表我是自己建的。。。不知道是不是这个原因,弄的hibernate就搞不清楚了。。。

67,515

社区成员

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

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