Hibernate保存含外键的对象

-YYQING 2018-01-07 02:17:34
有个问题请问一下各位!我写一个系统,用Struts2+hibernate框架,用JSP写了一个录入数据的界面,通过表单提交给Action类进行对象的保存。
我要保存的是Student对象,其中包含所属班级的属性,在Student类中引用了Class类

//Student的POJO类
public class Student {
private int id;
private String name;
private Class ofclass;
//其他属性和getter,setter省略
}
//Class的POJO类
public class Classt {
private int id;
private String name;
//其他属性和getter,setter省略
}


Student.hbn.xml中关于ofclass列的配置:

<many-to-one class="edu.gdut.studentmis.vo.Class" fetch="join" name="ofclass">
<column name="OFCLASS"/>
</many-to-one>


JSP中的表单:

<form action="stu_add" method="post">
<!-- 其他表格省略 -->
<tr>
<td>所属班级</td>
<td>
<select name="obj.ofclass">
<!-- 这里的c是Class对象,这里没有问题,c.name能正常显示 -->
<c:forEach var="c" items="${items}">
<option value="c">${c.name}</option>
</c:forEach>
</select>
</td>
</tr>
</from>

我想知道option中的value值可以设置为一个对象吗?我把value值设置为对象之后进行保存,报错说数据库中的ofclass列不能为空的,也就是有两种可能:一种是value值不能设置为对象;另一种可能就是在将Student进行保存的时候因为Hibernate的配置问题不能将Class对象转为class的id存入Student的班级列。请问应该怎么解决呢?
初学,没有经验,请前辈们多多指教!
...全文
243 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
化工厂很高 2018-01-07
  • 打赏
  • 举报
回复
引用 7 楼 -YYQING的回复:
我还有个小问题——我数据库表中有一个字段设置了非空和默认值,我在jsp没有设置该字段的输入,进行保存时报错说该字段不能为空。(数据库用的是mysql)
这个简单,你随便传一个值,插入添加到mysql中这个值会自动被你设定的默认代替,最代表的就是主键。
-YYQING 2018-01-07
  • 打赏
  • 举报
回复
我还有个小问题——我数据库表中有一个字段设置了非空和默认值,我在jsp没有设置该字段的输入,进行保存时报错说该字段不能为空。(数据库用的是mysql)
-YYQING 2018-01-07
  • 打赏
  • 举报
回复
引用 5 楼 qq_29623901 的回复:
你在前台数据提交到action后,打印解析一下接受到的参数你就知道为什么会报那个错误了。 你的思路没有错,在下拉框中添加id为value值,然后再查一遍数据,再做添加,这应该是最为安全的方法。h这个对对象操作不太灵活,所以现在都在用mybatis,楼主可以参考一下,希望能帮到你。
好的,非常谢谢你的建议!
化工厂很高 2018-01-07
  • 打赏
  • 举报
回复
你在前台数据提交到action后,打印解析一下接受到的参数你就知道为什么会报那个错误了。 你的思路没有错,在下拉框中添加id为value值,然后再查一遍数据,再做添加,这应该是最为安全的方法。h这个对对象操作不太灵活,所以现在都在用mybatis,楼主可以参考一下,希望能帮到你。
-YYQING 2018-01-07
  • 打赏
  • 举报
回复
诶。。。。突然发现<option value="c">${c.name}</option>这里应该用el表达式写value值才对,然后改成了<option value="${c}">${c.name}</option>这样之后,value值变成了“edu.gdut.studentmis.vo.Class@4eef2e49” ,这就是班级的对象吧!不过呢,这样进行保存还是会报ofclass列不能为空这样的错误。。。
-YYQING 2018-01-07
  • 打赏
  • 举报
回复
引用 1 楼 qq_29623901 的回复:
问一下楼主 private Class ofclass; 对,就这句话,你这是建立了班级的对象是吧,ssh是对对像进行操作,设置了一对多关系后是可以进行对象数据插入的。 在前台jsp中,你用c标签遍历后,你可以在浏览器中查看一下,下拉框中的value值是否存在。
好的,查看了一下,发现应该是value不能设置为对象了,自动将option中的文本设置为了value值。那这样我应该如何将班级对象保存进Student对象呢?如果我将option的value设置为班级id,这样传给后台保存的话还需要根据id查找对应的班级对象啊,这是不是不太规范呢?
化工厂很高 2018-01-07
  • 打赏
  • 举报
回复
还有想提示一下,在敲代码时,自己建立的名称,注意回避关键字。
化工厂很高 2018-01-07
  • 打赏
  • 举报
回复
问一下楼主 private Class ofclass; 对,就这句话,你这是建立了班级的对象是吧,ssh是对对像进行操作,设置了一对多关系后是可以进行对象数据插入的。 在前台jsp中,你用c标签遍历后,你可以在浏览器中查看一下,下拉框中的value值是否存在。
HIBERNATE - 符合Java习惯的关系数据库持久化 Hibernate参考文档 3.2 -------------------------------------------------------------------------------- 目录 前言 1. 翻译说明 2. 版权声明 1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第二部分 - 关联映射 1.3.1. 映射Person类 1.3.2. 单向Set-based的关联 1.3.3. 使关联工作 1.3.4. 值类型的集合 1.3.5. 双向关联 1.3.6. 使双向连起来 1.4. 第三部分 - EventManager web应用程序 1.4.1. 编写基本的servlet 1.4.2. 处理与渲染 1.4.3. 部署与测试 1.5. 总结 2. 体系结构(Architecture) 2.1. 概况(Overview) 2.2. 实例状态 2.3. JMX整合 2.4. 对JCA的支持 2.5. 上下文相关的(Contextual)Session 3. 配置 3.1. 可编程的配置方式 3.2. 获得SessionFactory 3.3. JDBC连接 3.4. 可选的配置属性 3.4.1. SQL方言 3.4.2. 外连接抓取(Outer Join Fetching) 3.4.3. 二进制流 (Binary Streams) 3.4.4. 二级缓存与查询缓存 3.4.5. 查询语言中的替换 3.4.6. Hibernate的统计(statistics)机制 3.5. 日志 3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 3.8.2. JNDI绑定的SessionFactory 3.8.3. 在JTA环境下使用Current Session context (当前session上下文)管理 3.8.4. JMX部署 4. 持久化类(Persistent Classes) 4.1. 一个简单的POJO例子 4.1.1. 实现一个默认的(即无参数的)构造方法(constructor) 4.1.2. 提供一个标识属性(identifier property)(可选) 4.1.3. 使用非final的类 (可选) 4.1.4. 为持久化字段声明访问器(accessors)和是否可变的标志(mutators)(可选) 4.2. 实现继承(Inheritance) 4.3. 实现equals()和hashCode() 4.4. 动态模型(Dynamic models) 4.5. 元组片断映射(Tuplizers) 5. 对象/关系数据库映射基础(Basic O/R Mapping) 5.1. 映射定义(Mapping declaration) 5.1.1. Doctype 5.1.2. hibernate-mapping 5.1.3. class 5.1.4. id 5.1.5. composite-id 5.1.6. 鉴别器(discriminator) 5.1.7. 版本(version)(可选) 5.1.8. timestamp (可选) 5.1.9. property 5.1.10. 多对一(many-to-one) 5.1.11. 一对一 5.1.12. 自然ID(natural-id) 5.1.13. 组件(component), 动态组件(dynamic-component) 5.1.14. properties 5.1.15. 子类(subclass) 5.1.16. 连接的子类(joined-subclass) 5.1.17. 联合子类(union-subclass) 5.1.18. 连接(join) 5.1.19. 键(key) 5.1.20. 字段和规则元素(column and formula elements) 5.1.21. 引用(import) 5.1.22. any 5.2. Hibernate 的类型 5.2.1. 实体(Entities)和值(values) 5.2.2. 基本值类型 5.2.3. 自定义值类型 5

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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