用户、贴吧、帖子三个类
帖子和用户单向多对一
帖子和贴吧单向多对一
保存帖子时报错:
java.lang.reflect.InvocationTargetException sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)以下是源代码,为了避免太长,将构造方法等没用的东西删掉了:
/**
* 帖子
*
* @author 刘星鹭
* @Email liuxinglumail@163.com
* @version 创建时间: 2014年8月31日 下午7:43:00
*/
@Entity
@Table(name = "posts")
public class Post {
private Integer postNo; // 帖子编号
private String postTitle; // 帖子标题
private String postContent; // 帖子内容
private User postUser; // 帖子作者
private Tieba postTieba; // 帖子所在贴吧
/**
* 获得帖子号
*
* @return 帖子号
*/
@Id
@GeneratedValue
public Integer getPostNo() {
return postNo;
}
/**
* 设置帖子号
*
* @param postNo
* 帖子号
*/
public void setPostNo(Integer postNo) {
this.postNo = postNo;
}
/**
* 获得帖子标题
*
* @return 帖子标题
*/
@Column(length = 20, nullable = false)
public String getPostTitle() {
return postTitle;
}
/**
* 设置帖子标题
*
* @param postTitle
* 帖子标题
*/
public void setPostTitle(String postTitle) {
this.postTitle = postTitle;
}
/**
* 获得帖子内容
*
* @return 帖子内容
*/
@Lob
@Column(nullable = false)
public String getPostContent() {
return postContent;
}
/**
* 设置帖子内容
*
* @param postContent
* 帖子内容
*/
public void setPostContent(String postContent) {
this.postContent = postContent;
}
/**
* 获得帖子作者
*
* @return 帖子作者
*/
@ManyToOne(cascade = {CascadeType.REFRESH,CascadeType.MERGE,CascadeType.PERSIST}, fetch = FetchType.EAGER // 只要是@xxxOne默认fetchType是eager
, optional = false // 代表这个对象是不是可有可无的
)
@JoinColumn(name = "user_name")
// 指定外键的名称
public User getPostUser() {
return postUser;
}
/**
* 设置帖子作者
*
* @param postUser
* 帖子作者
*/
public void setPostUser(User postUser) {
this.postUser = postUser;
}
/**
* 获得帖子所在贴吧
*
* @return 帖子所在贴吧
*/
@ManyToOne(cascade = {CascadeType.REFRESH,CascadeType.MERGE,CascadeType.PERSIST}, fetch = FetchType.EAGER // 只要是@xxxOne默认fetchType是eager
, optional = false // 代表这个对象是不是可有可无的
)
@JoinColumn(name = "tieba_name")
// 指定外键的名称
public Tieba getPostTieba() {
return postTieba;
}
/**
* 设置帖子所在贴吧
*
* @param postTieba
* 帖子所在贴吧
*/
public void setPostTieba(Tieba postTieba) {
this.postTieba = postTieba;
}
}
/**
* 用户
*
* @author 刘星鹭
* @Email liuxinglumail@163.com
* @version 创建时间: 2014年8月31日 下午6:35:16
*/
@Entity
@Table(name = "users")
public class User {
private String userName; // 用户名
private String userPassword; // 用户密码
private String userSex; // 用户性别
private java.util.Date userBirthday; // 用户生日
private Set<Tieba> favourateTiebas = new HashSet<Tieba>(); // 用户喜欢的贴吧
//private Set<Post> thisUsersPosts = new HashSet<Post>(); // 用户发布的帖子
/**
* 获得用户名
*
* @return 用户名
*/
@Id
// 主键
@Column(length = 20, nullable = false)
// 字段长度为20,不可为空
public String getUserName() { // 以下均为Getter和Setter
return userName;
}
/**
* 设置用户名
*
* @param userName
* 用户名
*/
public void setUserName(String userName) {
this.userName = userName;
}
/**
* 获得用户密码
*
* @return 用户密码
*/
@Column(length = 20, nullable = false)
// 字段长度为20,不可为空
public String getUserPassword() {
return userPassword;
}
/**
* 设置用户密码
*
* @param userPassword
* 用户密码
*/
public void setUserPassword(String userPassword) {
this.userPassword = userPassword;
}
/**
* 获得用户性别
*
* @return 用户性别
*/
@Column(length = 5, nullable = false)
// 字段长度为20,不可为空
public String getUserSex() {
return userSex;
}
/**
* 设置用户性别
*
* @param userSex
* 用户性别
*/
public void setUserSex(String userSex) {
this.userSex = userSex;
}
/**
* 获得用户生日
*
* @return 用户生日
*/
@Temporal(TemporalType.DATE)
// 日期类型为DATE
@Column(nullable = false)
// 字段不可为空
public java.util.Date getUserBirthday() {
return userBirthday;
}
/**
* 设置用户生日
*
* @param userBirthday
* 用户生日
*/
public void setUserBirthday(java.util.Date userBirthday) {
this.userBirthday = userBirthday;
}
/**
* 获得该用户关注的贴吧
*
* @return 该用户关注的贴吧
*/
@ManyToMany(cascade = {CascadeType.REFRESH,CascadeType.MERGE})
@JoinTable(name = "user_tieba", inverseJoinColumns = @JoinColumn(name = "tieba_name") // 可以理解为“跟被维护端的外键的定义”
, joinColumns = @JoinColumn(name = "user_name"))
// 注意这个name是没有提示的
public Set<Tieba> getFavourateTiebas() {
return favourateTiebas;
}
/**
* 设置该用户关注的贴吧
*
* @param favourateTiebas
* 该用户关注的贴吧
*/
public void setFavourateTiebas(Set<Tieba> favourateTiebas) {
this.favourateTiebas = favourateTiebas;
}
}
/**
* 贴吧
*
* @author 刘星鹭
* @Email liuxinglumail@163.com
* @version 创建时间: 2014年8月31日 下午7:08:06
*/
@Entity
@Table(name = "tiebas")
public class Tieba {
private String tiebaName;// 贴吧名
private boolean deleted = false;// 是否被删除(不在数据库中显示)
private Set<User> thisTiebasUsers = new HashSet<User>(); // 本贴吧的用户
//private Set<Post> thisTiebasPosts = new HashSet<Post>(); // 本贴吧的帖子
/**
* 获得贴吧名
*
* @return 贴吧名
*/
@Id
// 主键
@Column(length = 20, nullable = false)
// 字段长度为20,不可为空
public String getTiebaName() { // 以下均为Getter和Setter
return tiebaName;
}
/**
* 设置贴吧名
*
* @param tiebaName
* 贴吧名
*/
public void setTiebaName(String tiebaName) {
this.tiebaName = tiebaName;
}
/**
* 获得该贴吧所有用户
*
* @return 该贴吧所有用户
*/
@ManyToMany(cascade = {CascadeType.REFRESH,CascadeType.MERGE} // 笔记:级联删除基本用不到
, mappedBy = "favourateTiebas")
public Set<User> getThisTiebasUsers() {
return thisTiebasUsers;
}
/**
* 设置该贴吧所有用户
*
* @param thisTiebasUsers
* 该贴吧所有用户
*/
public void setThisTiebasUsers(Set<User> thisTiebasUsers) {
this.thisTiebasUsers = thisTiebasUsers;
}
/**
* 判断该贴吧是否被删除
*
* @return 该贴吧是否被删除
*/
@Transient
public boolean isDeleted() {
return deleted;
}
/**
* 设置该贴吧是否被删除
*
* @param deleted
* 该贴吧是否被删除
*/
public void setDeleted(boolean deleted) {
this.deleted = deleted;
}
}
/**
* 帖子_添加帖子Action
*
* @author 刘星鹭
* @Email liuxinglumail@163.com
* @version 创建时间: 2014年9月9日 下午4:55:15
*/
@Controller
@Transactional
public class AddPostAction {@Resource
PostService postService;// 注入帖子Service
@Resource
UserService userService;// 注入用户Service
@Resource
PostService postService;// 注入帖子Service
private String userName;//用户名
private String tiebaName;//贴吧名
private String postTitle;//帖子标题
private String postContent;//帖子内容
/**
* 调用本Action时执行本方法
*
* @return 用于Action判断跳转方向的字符串
*/
public String execute() {
User user=userService.find(userName);//底层调用的是session.get
Tieba tieba=tiebaService.find(tiebaName);//底层调用的是session.get
Post post=new Post(postTitle, postContent, user, tieba);
postService.add(post);//底层调用的是session.persist
return "success";
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getTiebaName() {
return tiebaName;
}
public void setTiebaName(String tiebaName) {
this.tiebaName = tiebaName;
}
public String getPostTitle() {
return postTitle;
}
public void setPostTitle(String postTitle) {
this.postTitle = postTitle;
}
public String getPostContent() {
return postContent;
}
public void setPostContent(String postContent) {
this.postContent = postContent;
}
}
请问哪里报错了呀!!!
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
代码还是很长,只贴出主键和关联关系就够了,异常信息要多一点######把报错信息全部黏贴出来吧######