Hibernate 配置1对多,插入等问题的demo

Jacky_Zhu_1983 2009-01-22 01:45:31
最近老是看到有人问Hibernate 1对多,多对1配置,插入,删除等问题.
我就动手做了个小的事例,希望对大家有用!
----BlogUser 表

public class BlogUser implements java.io.Serializable {

private static final long serialVersionUID = 8850445505288137285L;

private Integer userId;

private String userName;

private String passWordOne;

private Set<BlogFile> blogFile = new HashSet<BlogFile>();
//省略set & get ....
}

----BlogFile 表

public class BlogFile implements java.io.Serializable {

private static final long serialVersionUID = -1963389377781856294L;

private Integer fileId;

private String filePath;

private String fileName;

private BlogUser blogUser; //private String createUserId;
//省略set & get ....
}

---BlogUser.hbm.xml

<hibernate-mapping>
<class name="model.user.BlogUser" table="BLOG_User" schema="dbo" catalog="Blog"
dynamic-update="true" optimistic-lock="version" >
<id name="userId" type="java.lang.Integer">
<column name="userId" />
<generator class="native" />
</id>
<property name="userName" type="java.lang.String">
<column name="userName" length="50" />
</property>
<property name="passWordOne" type="java.lang.String">
<column name="passWordOne" length="50" />
</property>
<set name="blogFile" inverse="true" lazy="true" cascade="all-delete-orphan">
<key>
<column name="userId" />
</key>
<one-to-many class="model.user.BlogFile"/>
</set>
</class>
</hibernate-mapping>

---BlogFile.hbm.xml

<hibernate-mapping>
<class name="model.user.BlogFile" table="Blog_File" schema="dbo" catalog="Blog">
<id name="fileId" type="java.lang.Integer">
<column name="fileId" />
<generator class="native" />
</id>
<property name="filePath" type="java.lang.String">
<column name="filePath" length="200" />
</property>
<property name="fileName" type="java.lang.String">
<column name="fileName" length="200" />
</property>
<many-to-one name="blogUser"
class="model.user.BlogUser">
<column name="createUserId" /> <!--createUserId 是blogUser的主键userId -->
</many-to-one>
</class>
</hibernate-mapping>

---action
public ActionForward insertUser(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
BlogUser blogUser = new BlogUser();

Set<BlogFile> file = new HashSet<BlogFile>();

blogUser.setUserName("mousetsun");
blogUser.setPassWordOne("111111");

BlogFile blogFile = new BlogFile();
blogFile.setFileName("aaa");
blogFile.setFilePath("bbb");
blogFile.setBlogUser(blogUser);
file.add(blogFile);

BlogFile blogFile1 = new BlogFile();
blogFile1.setFileName("ccc");
blogFile1.setFilePath("ddd");
blogFile1.setBlogUser(blogUser);
file.add(blogFile1);

blogUser.setBlogFile(file);
//spring...service 调用dao
BlogUserService blogUserService = Locator
.lookupService(BlogUserService.class);
BlogUser user = blogUserService.insertUser(blogUser);
//********
System.out.println(user.getBlogFile().size());

return mapping.findForward("index");
}

---DAO
//GenericDaoHibernateImpl 是我自己写的一些hibernate常用接口方法
public class BlogUserDaoImpl extends GenericDaoHibernateImpl<BlogUser, Integer> implements BlogUserDao{

public BlogUser insertUser(BlogUser blogUser) {
// TODO Auto-generated method stub
this.getHibernateTemplate().clear();
blogUser = (BlogUser) this.getHibernateTemplate()
.merge(blogUser);
this.getHibernateTemplate().flush();
return blogUser;
}
}


PS: 有写的不好地方希望大家改正!
...全文
424 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lvfeng180 2009-07-17
  • 打赏
  • 举报
回复
但是只保存进一条数据,怎么才能同时保存所有的子类数据。
lvfeng180 2009-07-17
  • 打赏
  • 举报
回复
顶一下
cchaha 2009-02-13
  • 打赏
  • 举报
回复
不错,多谢分享
mirzlm 2009-02-13
  • 打赏
  • 举报
回复
小顶
Jacky_Zhu_1983 2009-02-05
  • 打赏
  • 举报
回复
>_ < 帖子竟然沉了...顶起来!!!
Jacky_Zhu_1983 2009-02-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 cpoysy 的回复:]

<set name="blogFile" inverse="true" lazy="true" cascade="all-delete-orphan">
<key>
<column name="userId" />
</key>
<one-to-many class="model.user.BlogFile"/>
</set>
..........
<many-to-one name="blogUser"
class="model.user.BlogUser">
<column name="createUserId" /> <!--createUserId 是blogUser的主键u…
[/Quote]


- -! 不一样也可以的.配置好了就OK!
wish_tiger 2009-01-28
  • 打赏
  • 举报
回复
学习
cpoysy 2009-01-25
  • 打赏
  • 举报
回复

<set name="blogFile" inverse="true" lazy="true" cascade="all-delete-orphan">
<key>
<column name="userId" />
</key>
<one-to-many class="model.user.BlogFile"/>
</set>
..........
<many-to-one name="blogUser"
class="model.user.BlogUser">
<column name="createUserId" /> <!--createUserId 是blogUser的主键userId -->
</many-to-one>

红色的地方应该写一样的,要么都是userId,要么都是createUserId。
cpoysy 2009-01-25
  • 打赏
  • 举报
回复
兄弟,你写错啦。
K_JUN 2009-01-22
  • 打赏
  • 举报
回复
学习了,Hiernate感觉一定要清楚的了解3态(临时,持久,游离) 才能更好的使用和开发。。
K_JUN 2009-01-22
  • 打赏
  • 举报
回复
学习了,Hiernate感觉一定要清楚的了解3态(临时,持久,游离) 才能更好的使用和开发。。

81,122

社区成员

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

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