用户、贴吧、帖子三个类
帖子和用户单向多对一
帖子和贴吧单向多对一
保存帖子时报错:
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; } }
代码还是很长,只贴出主键和关联关系就够了,异常信息要多一点把报错信息全部黏贴出来吧<divclass='ref'>
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。