论坛首页 Java企业应用论坛

关于hibernate+struts的问题

浏览 3375 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2005-05-15  
做毕业设计急啊!
    我做一个HIbernate+Struts 的weblog。
代码如下:
有两个实体,Post,User:
/*
* Created on 2005-5-11
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package entity;


public class Post {
int id;
private String title;
private String content;
private User user;
/**
* @return Returns the user.
*/
public User getUser() {
return user;
}
/**
* @param user The user to set.
*/
public void setUser(User user) {
this.user = user;
}


public int getId(){
return id;
}
public void setId(int id){
this.id=id;
}
/**
* @return Returns the content.
*/
public String getContent() {
return content;
}
/**
* @param content The content to set.
*/
public void setContent(String content) {
this.content = content;
}
/**
* @return Returns the title.
*/
public String getTitle() {
return title;
}
/**
* @param title The title to set.
*/
public void setTitle(String title) {
this.title = title;
}
}





package entity;

import java.util.Set;

public class User {
private String userid;
private String name;
private String password;
private Set posts;



/**
* @return Returns the posts.
*/
public Set getPosts() {
return posts;
}


/**
* @param posts The posts to set.
*/
public void setPosts(Set posts) {
this.posts = posts;
}
/**
* @return Returns the name.
*/
public String getName() {
return name;
}
/**
* @param name The name to set.
*/
public void setName(String name) {
this.name = name;
}
/**
* @return Returns the password.
*/
public String getPassword() {
return password;
}
/**
* @param password The password to set.
*/
public void setPassword(String password) {
this.password = password;
}
/**
* @return Returns the userid.
*/
public String getUserid() {
return userid;
}
/**
* @param userid The userid to set.
*/
public void setUserid(String userid) {
this.userid = userid;
}
}

Form和Action如下:
/*
* Created on 2005-5-11
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package www;

import org.apache.struts.action.ActionForm;

/**
* @author liuwei
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
import entity.Post;
public class PostForm extends ActionForm {
int id;
private String title;
private String content;



 

public int getId(){
return id;
}
public void setId(int id){
this.id=id;
}
/**
* @return Returns the content.
*/
public String getContent() {
return content;
}
/**
* @param content The content to set.
*/
public void setContent(String content) {
this.content = content;
}
/**
* @return Returns the title.
*/
public String getTitle() {
return title;
}
/**
* @param title The title to set.
*/
public void setTitle(String title) {
this.title = title;
}
}


/*
* Created on 2005-5-11
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package www;

import dao.HibernatePostDAO;
import entity.Post;
import dto.PostDTO;
import dto.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import service.PostService;


/**
* @author liuwei
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class PostAction extends Action {

/* (non-Javadoc)
* @see org.apache.struts.action.Action#execute(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
public ActionForward execute(
    ActionMapping mapping,
    ActionForm form,
    HttpServletRequest request,
    HttpServletResponse response )
{
// TODO Auto-generated method stub
PostForm pf=(PostForm)form;
//生成PostDTO
//sevice.post(postDTO);
//Post post=new Post();
//post.setTitle(pf.getTitle() );
//post.setContent(pf.getContent());


//
UserDTO userdto=new UserDTO();
userdto.setUserid("111");

//生成一个postdto;
PostDTO postDto=new PostDTO();
postDto.setTitle(pf.getTitle());
postDto.setContent(pf.getContent());
postDto.setUserid(userdto.getUserid() );
//调用service进行持久化
PostService postservice=new PostService();
postservice.post(postDto);
return(mapping.findForward("out"));

}
}


然后通过Form生成DTO;
/*
* Created on 2005-5-11
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package dto;
/**
* @author liuwei
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class PostDTO {
private int id;
private String title;
private String content;
private String userid;

/**
* @return Returns the userid.
*/
public String getUserid() {
return userid;
}
/**
* @param userid The userid to set.
*/
public void setUserid(String userid) {
this.userid = userid;
}
public int getId(){
return id;
}
public void setId(int id){
this.id=id;
}
public String getTitle() {
return title;
}
/**
* @param title The title to set.
*/
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
/**
* @param title The title to set.
*/
public void setContent(String content) {
this.content = content;
}
}

把生成的DTO在PostService里实现持久化;
/*
* Created on 2005-5-11
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/



package service;

import dto.*;
import entity.*;
import dao.*;

/**
* @author liuwei
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class PostService {

HibernateUserDAO userdao;
HibernatePostDAO postdao;

public  PostService(){


}



public void post(PostDTO postdto){
//从dto里面获得
Post post=new Post();
post.setTitle(postdto.getTitle());
post.setContent(postdto.getContent());



HibernateUserDAO userdao=new HibernateUserDAO();
User user=userdao.getUserById(postdto.getUserid());
post.setUser(user);

//先持久post,post得到id
//
postdao.savePost(post);

//再持久user的post对象
user.getPosts().add(post);
userdao.saveUser(user);


}

}

实现持久的文件dao为:
/*
* Created on 2005-5-11
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package dao;

/**
* @author liuwei
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
import entity.Post;
import net.sf.hibernate.*;
import net.sf.hibernate.cfg.*;
public class HibernatePostDAO{
public void savePost(Post post){
        try {
        SessionFactory sf =
           new Configuration().configure().buildSessionFactory();
           Session session = sf.openSession();
           Transaction tx = session.beginTransaction();
           Post p=new Post();
p.setTitle(post.getTitle());
p.setContent(post.getContent());
session.save(p);
tx.commit();
session.close();
       } catch (HibernateException e) {
           e.printStackTrace();
       }
      }
}

User为已经存在的用户!
这个流程有错误么?我在eciplise里怎么也不能实现把post插进数据库,更不用说实现post和user的关联!
hibernate和struts的配置文件如下:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">

<hibernate-mapping>
    <class name="Post" table="post">
        <id name="id" column="id">
            <generator class="increment" />
        </id>
        <property name="title" column="title" />
        <property name="content" column="content" />
<many-to-one name="user" column="user_id"
class="User" />
    </class>
</hibernate-mapping>
Post.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping
    PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping>
    <class name="User" table="user">
    <id name="id" type="string" column="id"> 
            <generator class="assigned"/> 
        </id>
    <property name="name" column="name" type="string"/>        
<set name="posts" lazy="true" inverse="false" cascade="all" >
             <key column="user_id"/>
             <one-to-many class="Post"/>
</set>
    </class> 
</hibernate-mapping>
User.hbm.xml
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics