保存一个或多个与未保存的瞬态实体具有非可空关联的实体

时间:2013-07-28 10:27:23

标签: hibernate

我有一些POJOS如下:

  1. Student.java
  2. Feedback.java
  3. Forum.java
  4. Solution.java
  5. Suggestions.java
  6. 还有一个类,我通过hibernate将用户添加到mysql数据库。 这是这样做的方法:

                import java.util.List;
                import org.hibernate.Transaction;
                import java.util.Date;
                import java.util.HashSet;
                import java.util.Set;
                public class HibernateExample 
                {
                    public static void main(String[] args)
                    {
                        addUser();
                    }
    
                    private static void addUser() 
                    {
                        Student user = new Student();
                        user.setEmailId("harshal@gmail.com");
                        user.setFname("fd");
                        user.setLname("dsfds");
                        user.setStuId(43);
    
                        Set<Feedback> feeds=new HashSet<Feedback>();
                        Feedback feed=new Feedback();
                        feed.setFeedId(1);
                        feed.setFeedDate(new Date());
                        feed.setStudent(user);
                        Suggestions suggestions=new Suggestions();
                        suggestions.setSugession("imrove hjds");
                        suggestions.setSugessionId(43);
                        suggestions.setFeedbacks(feeds);
                        feed.setSuggestions(suggestions);
                        feeds.add(feed);
                        user.setFeedbacks(feeds);
    
    
                        Set<Forum> forums=new HashSet<Forum>();
                        Forum fo=new Forum();
                        fo.setQuestion("what's the dks?");
                        fo.setQuestionDate(new Date());
                        fo.setQuestionId(23);
                        fo.setQuestionTitle("how rto");
    
                        Solution solution=new Solution();
                        solution.setSolId(4554);
                        solution.setSolution("get taht girl");
                        fo.setStudent(user);
                        forums.add(fo);
                        solution.setForums(forums);
                        fo.setSolution(solution);
    
                        user.setFeedbacks(feeds);
                        // 2. Create DAO
                        StudentDAO dao = new StudentDAO();
    
                        // 3. Start the transaction
                        Transaction tx = dao.getSession().beginTransaction();
    
                        // 4. Add user
                        dao.save(user);
    
                        // 5. Commit the transaction (write to database)
                        tx.commit();
    
                        // 6. Close the session (cleanup connections)
                        dao.getSession().close();
                    }
                }   
    

    我得到的错误是:

                WARN: HHH000437: Attempting to save one or more entities that have a non-nullable association with an unsaved transient entity. The unsaved transient entity must be saved in an operation prior to saving these dependent entities.
                    Unsaved transient entity: ([Suggestions#43])
                    Dependent entities: ([[Feedback#1]])
                    Non-nullable association(s): ([Feedback.suggestions])
                Exception in thread "main" org.hibernate.TransientPropertyValueException: Not-null property references a transient value - transient instance must be saved before current operation: Feedback.suggestions -> Suggestions
                    at org.hibernate.action.internal.UnresolvedEntityInsertActions.checkNoUnresolvedActionsAfterOperation(UnresolvedEntityInsertActions.java:135)
                    at org.hibernate.engine.spi.ActionQueue.checkNoUnresolvedActionsAfterOperation(ActionQueue.java:240)
                    at org.hibernate.internal.SessionImpl.checkNoUnresolvedActionsAfterOperation(SessionImpl.java:709)
                    at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:759)
                    at org.hibernate.internal.SessionImpl.save(SessionImpl.java:749)
                    at org.hibernate.internal.SessionImpl.save(SessionImpl.java:745)
                    at StudentDAO.save(StudentDAO.java:32)
                    at HibernateExample.addUser(HibernateExample.java:144)
                    at HibernateExample.main(HibernateExample.java:15)
    

    虽然错误看起来不言自明,但我在序列中遇到了一些问题 我应该在添加user方法()中执行操作。 那我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

保存Student会导致FeedbackSuggestions个实体按某种顺序保存,这与Feedback依赖{{1}的事实无关}}

首先尝试保存Suggestions实体,然后再保存Suggestions(这将导致Student也被保存,但这次之后 {{ 1}}),就像那样:

Feedback

您可能会遇到其他错误排序的保存操作,因此您只需相应地单独保存它们。