我做的这个SSH,刚开始的时候,只有一个表User,能够正常CRUD,然而我现在又增加了一个成绩表进行一对一关联,结果也要求显示成绩,这个时候就出问题了,查询出来总是空值,
我的User类如下:
private Integer id;
private String username;
private String password;
private String sex;
private Score score;
//get,set省略,
Score类如下:
private Integer id;
private Integer score;
private Sshuser user;
// get,set省略 主键都是ID,并且一对一关联。
User.hbm.xml如下:
<hibernate-mapping>
<class name="com.hibernate.Sshuser" table="sshuser" catalog="ssh">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="increment" />
</id>
<property name="username" type="java.lang.String">
<column name="username" length="30" />
</property>
<property name="password" type="java.lang.String">
<column name="password" length="20" />
</property>
<property name="sex" type="java.lang.String">
<column name="sex" length="10" />
</property>
<one-to-one name="score" class="com.hibernate.Score" cascade="all"/>
</class>
</hibernate-mapping>
Score.hbm.xml如下:
<hibernate-mapping>
<class name="com.hibernate.Score" table="score" catalog="ssh">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="foreign" >
<param name="property">user</param>
</generator>
</id>
<property name="score" type="java.lang.Integer">
<column name="score" />
</property>
<one-to-one name="user" class="com.hibernate.Sshuser" constrained="true" />
</class>
</hibernate-mapping>
我的查询是这样用的
return getHibernateTemplate().find("from com.hibernate.Score a," +
"com.hibernate.Sshuser s where s.id=a.id");
页面显示的代码是:
<s:iterator value="userList">
<tr>
<td><s:property value="id" /></td>
<td><s:property value="username" /></td>
<td><s:property value="password" /></td>
<td><s:property value="score" /></td>
<td><s:property value="sex" /></td>
<td><a href='deleteAction.action?id=${id}'>删除</a>
<a href='EditAction.action?id=${id}'>修改</a></td>
</tr>
</s:iterator>applicationContext.xml应该没有问题,太长了,就不发了
现在的问题是,如果只查询一个表,不管是User还是Score,都可以,可是级联起来后,就不行了,我应该如何改,如果还有什么地方不清楚,请说,我再补上来。谢谢
我的User类如下:
private Integer id;
private String username;
private String password;
private String sex;
private Score score;
//get,set省略,
Score类如下:
private Integer id;
private Integer score;
private Sshuser user;
// get,set省略 主键都是ID,并且一对一关联。
User.hbm.xml如下:
<hibernate-mapping>
<class name="com.hibernate.Sshuser" table="sshuser" catalog="ssh">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="increment" />
</id>
<property name="username" type="java.lang.String">
<column name="username" length="30" />
</property>
<property name="password" type="java.lang.String">
<column name="password" length="20" />
</property>
<property name="sex" type="java.lang.String">
<column name="sex" length="10" />
</property>
<one-to-one name="score" class="com.hibernate.Score" cascade="all"/>
</class>
</hibernate-mapping>
Score.hbm.xml如下:
<hibernate-mapping>
<class name="com.hibernate.Score" table="score" catalog="ssh">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="foreign" >
<param name="property">user</param>
</generator>
</id>
<property name="score" type="java.lang.Integer">
<column name="score" />
</property>
<one-to-one name="user" class="com.hibernate.Sshuser" constrained="true" />
</class>
</hibernate-mapping>
我的查询是这样用的
return getHibernateTemplate().find("from com.hibernate.Score a," +
"com.hibernate.Sshuser s where s.id=a.id");
页面显示的代码是:
<s:iterator value="userList">
<tr>
<td><s:property value="id" /></td>
<td><s:property value="username" /></td>
<td><s:property value="password" /></td>
<td><s:property value="score" /></td>
<td><s:property value="sex" /></td>
<td><a href='deleteAction.action?id=${id}'>删除</a>
<a href='EditAction.action?id=${id}'>修改</a></td>
</tr>
</s:iterator>applicationContext.xml应该没有问题,太长了,就不发了
现在的问题是,如果只查询一个表,不管是User还是Score,都可以,可是级联起来后,就不行了,我应该如何改,如果还有什么地方不清楚,请说,我再补上来。谢谢
解决方案 »
- kindeditor在上传图片是和struts2冲突,谁知道怎么解决啊。求求求求求求求求求求求求求求求求求求。。。
- 关于javascript的一些问题
- 怎么实现多条记录同时删除和修改密码
- java b2b外贸平台问题-----店铺的开发思路(最好有例子)
- 关于页面的一些问题(不知道是跳转出问题,还是其他出问题)
- 大家好谁知道像这网站里的树形菜单http://ymmz.nease.net/txsub/007.htm如果子菜单展开下面还有子菜单 那怎么做?谢谢
- 文件上传下载 源码
- 我是初学者,请帮我解决这个有关javabean的问题
- jquery.form的回调函数success根据不执行
- 无法通过域名直接访问外网部署的项目
- Project infosite is missing required library: 'C:\Program Files\Java\Tomcat 5.0\common\lib\servlet.jar'
- tomcat配置连接池错误
<one-to-one name="score" class="com.hibernate.Score" cascade="all"/>
因为这里你已经设置了one-to-one了,你直接把Sshuser读取来,score就可以直接用了
<td><s:property value="score.score" /></td>
就可以了,CRUD也都可以了,不过还有一个问题,如果我把User和Score放在applicationContext.xml中做成Bean,像这样
<bean id="User" class="com.hibernate.Sshuser">
</bean>
<bean id="Score" class="com.hibernate.Score">
</bean>然后在类的配置文件中这样写
<one-to-one name="user" class="User" constrained="true" />
也就是通过spring来管理Bean,为什么会报以下错误呢?org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource
[/WEB-INF/classes/applicationContext.xml]: Invocation of init method failed; nested exception is org.hibernate.MappingException: An association from the table score refers to an unmapped class: User
Caused by:
org.hibernate.MappingException: An association from the table score refers to an unmapped class: User
和明显,你的一个Score并没有一个对应的User,检查你的Score数据库的数据吧,有没主的!你没有建立数据库的外键哦!
1.<s:property value="score" /> 此score在User类中是个对象,应改成score.score
2.你默认用到延迟加载,要用openSessionInView在页面将session打开
谁让你检查主键了。
在那里看看有无能回答你的,谢谢,LZ,甭忘了给俺分哦,谢谢LZ