2016-05-17 98 views
0

求解休眠复制插入

但真正的问题是不休眠,它主要是我和第二个Netbeans。

我正在发帖,并保存我的数据。但是我在js中做了一个重复的帖子,Netbeans不会两次触发断点(我不知道为什么)。所以,对我来说,这是一个职位,只有一个插入。但是,不,两个帖子和两个插入。

抱歉失去你的时间:/


我对Hibernate,所以我有一些问题,也许它只是一个愚蠢的人,我真的不知道。

我想用@ManyToOne关系向数据库插入一个对象,但是当我坚持并提交事务时,Hibernate正在复制它。这是我的代码。

网友发帖类

@Entity 
@Table(name = "USERPOST", schema = "ADMIN1") 
public class UserPost implements java.io.Serializable { 

    private int iduserpost;  
    private String detail; 
    private User user; 

    public UserPost() { 
    } 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "IDUSERPOST", unique = true, nullable = false) 
    public int getIduserpost() { 
     return this.iduserpost; 
    } 

    public void setIduserpost(int iduserpost) { 
     this.iduserpost = iduserpost; 
    } 
    @Column(name = "DETAIL", nullable = false) 
    public String getDetail() { 
     return this.detail; 
    } 

    public void setDetail(String detail) { 
     this.detail = detail; 
    } 

    @ManyToOne 
    @JoinColumn(name = "IDUSER") 
    public User getUser() { 
     return user; 
    } 

    public void setUser(User user) { 
     this.user = user; 
    } 
} 

用户类别

@Entity 
@Table(name = "USER", schema = "ADMIN1") 
public class User implements java.io.Serializable { 

    private int iduser; 
    private String name; 
    private String email; 
    private Set<UserPost> posts; 

    public User() { 
    } 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "IDUSER", unique = true, nullable = false) 
    public int getIduser() { 
     return this.iduser; 
    } 

    public void setIduser(int iduser) { 
     this.iduser = iduser; 
    } 

    @Column(name = "NAME", nullable = false) 
    public String getName() { 
     return this.name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    @Column(name = "EMAIL", nullable = false) 
    public String getEmail() { 
     return this.email; 
    } 

    public void setEmail(String email) { 
     this.email = email; 
    } 

    @OneToMany(mappedBy = "user") 
    public Set<UserPost> getPosts() { 
     return posts; 
    } 

    public void setPosts(Set<UserPost> posts) { 
     this.posts = posts; 
    } 

} 

插入方法对经理

public void Insert(Object data) { 
    Session session = null; 
    try { 
     session = hibernateUtil.getSessionFactory().openSession(); 
     session.beginTransaction(); 
     session.persist(data); 
     session.getTransaction().commit(); 
    } catch (Exception e) { 
     System.err.println(e.getMessage()); 
     throw e; 
    } finally { 
     if (session.isOpen()) { 
      session.close(); 
     } 
    } 
} 

上的Servlet插入

FeedManager manager = new FeedManager(); 
UserPost post = new UserPost(); 
post.setDetail(text); 
User usrPesist = (User) manager.GetById(User.class, idUser); 
post.setUser(usrPesist); 
manager.Insert(post); 

我得到的结果是两个UserPosts插入数据库,当我想要的只是一个。

有什么问题吗?

+0

请启用[SQL日志记录](http://stackoverflow.com/a/1713464/4754790)并从日志中发布相关摘录。 –

回答

-1

尝试用这个修改代码:

@org.hibernate.annotations.Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE}) 
@OneToMany(mappedBy = "user") 
@JoinColumn(name = "IDUSER") 
public Set<UserPost> getPosts() { 
    return posts; 
} 
+0

仍然重复:( –

0

既然你已经定义为用户类private Set<UserPost> posts;, 实施equalshashcode方法UserPost类,以这种方式可以确保,因为它是一个集它不会添加重复项

但是,这不是一个最佳的方式,但。

+0

那么我应该怎么做,以获得最佳方式? –

+0

请分享更多的日志以便更好地排除故障。 – shankarsh15

0

我认为这是您用户类中您的id生成策略的问题。只需尝试在用户类对象中手动设置ID,它就可以工作。