2014-10-29 37 views
0

我的情景是,我有三個表模板,問題和選擇。休眠插入多個表中的記錄

這裏模板將有很多問題和問題將有很多選擇和其他領域在選擇表。

Im在Struts2中使用單一表單插入記錄。我的問題是如何配置在休眠?

謝謝!

@Entity 
@Table(name="template") 
public class Template { 

@javax.persistence.Id 
@GeneratedValue(strategy=GenerationType.AUTO) 
@Column(name="t_id") 
private Integer Id; 

private String temp; 

@OneToMany(targetEntity=Question.class, cascade=CascadeType.ALL) 
@JoinColumn(name="tempId", referencedColumnName="t_id") 
private Set<Question> question; 

//getter setter 


} 

@Entity 
@Table(name="question") 
public class Question { 
@Id 
@GeneratedValue(strategy=GenerationType.AUTO) 
@Column(name="Qid") 
private Integer Qid; 

private String question; 

@ManyToOne 
@JoinColumn(name="tempid") 
private Template template; 

@OneToMany(targetEntity=Choice.class, cascade=CascadeType.ALL) 
@JoinColumn(name="qid", referencedColumnName="Qid") 
private Set<Choice> choice; 

//getter setter 

} 

@Entity 
@Table(name="choice") 
public class Choice { 

@Id 
@GeneratedValue(strategy=GenerationType.AUTO) 
private Integer Id; 

private String choice; 

private String status; 

private String description; 

@ManyToOne 
@JoinColumn(name="qid") 
private Question question; 

//getter setter 

} 

************控制器*****************

public class UserController extends ActionSupport implements ServletRequestAware{ 


HttpServletRequest request; 

@Override 
public void setServletRequest(HttpServletRequest request) { 
    this.request =request; 
} 

Dao dao = new Dao(); 


Template template = new Template(); 

Question question = new Question(); 

Choice choice = new Choice(); 


public Choice getChoice() { 
    return choice; 
} 


public void setChoice(Choice choice) { 
    this.choice = choice; 
} 


public Question getQuestion() { 
    return question; 
} 


public void setQuestion(Question question) { 
    this.question = question; 
} 

public Template getTemplate() { 
    return template; 
} 


public void setTemplate(Template template) { 
    this.template = template; 
} 

public String insert(){ 
    System.out.println(choice); 
    SessionFactory sf = Dbutil.getConnection(); 
    Session session = sf.openSession(); 
    Transaction tx = session.beginTransaction(); 

    Choice ch1 = new Choice(); 
    ch1.setChoice(choice.getChoice()); 
    ch1.setStatus(choice.getStatus()); 
    ch1.setDescription(choice.getDescription()); 

    Set<Choice> chset = new HashSet<Choice>(); 
    chset.add(choice); 

    Set<Question> qns = new HashSet<Question>(); 
    qns.add(question); 

    Question q = new Question(); 
    q.setQuestion(question.getQuestion()); 
    q.setChoice(chset); 

    Template t = new Template(); 
    t.setTemplate(template.getTemplate()); 
    t.setQuestion(qns); 

    dao.insertemplate(t,q, ch1); 
    //session.save(t); 
    //session.save(q); 
    //session.save(ch1); 

    tx.commit(); 
    session.flush(); 

    return "success"; 
} 

} 

****** ************* DAO ******************

public class Dao { 


    public void insertemplateT(Template template, Question qn1, Choice ch1){ 

    SessionFactory sf = Dbutil.getConnection(); 
    Session session = sf.openSession(); 
    Transaction tx = session.beginTransaction(); 

    if(ch1!=null){ 
     insertChoice(ch1); 
     if(qn1!=null){ 

      insertQuestion(qn1); 

      if(template !=null){ 
       session.save(template); 
       tx.commit(); 
      } 
     } 
    } 

    } 

    public void insertQuestion(Question qn1) { 
    SessionFactory sf = Dbutil.getConnection(); 
    Session session = sf.openSession(); 
    Transaction tx = session.beginTransaction(); 

    session.save(qn1); 
    tx.commit(); 
    } 



    public void insertChoice(Choice ch1) { 
    SessionFactory sf = Dbutil.getConnection(); 
    Session session = sf.openSession(); 
    Transaction tx = session.beginTransaction(); 
    session.save(ch1); 
    tx.commit(); 
    System.out.println("committed"); 

    } 



    } 

*********** sql show ************

Hibernate:insert into choice(choice,description,qid,s (?,?,?) 承諾 Hibernate:插入問題(問題,tempid)值(?,?) Hibernate:插入選擇(選擇,描述,qid,狀態)values(?,? ?,?,?) Hibernate:更新選項集qid =?其中Id =? Hibernate:插入模板(temp)值(?) Hibernate:插入問題(問題,tempid)值(?,?) Hibernate:更新問題集tempId =? Qid =?

******問題牌桌形象****** enter image description here

+0

使用一對多映射。 – 2014-10-29 06:06:29

+0

而使用1到n即時通訊重複插入問題表我不知道爲什麼? – prabhakaran 2014-10-29 06:13:00

+0

需要看看你正在嘗試。 – 2014-10-29 06:15:06

回答

0
@Entity 
@Table(name="template") 
public class Template { 

@Id 
@GeneratedValue(strategy=GenerationType.AUTO) 
@Column(name="t_id") 
private Integer Id; 

private String temp; 

@OneToMany(mappedBy="template", cascade=CascadeType.ALL) 
private Set<Question> questions; 

} 




@Entity 
@Table(name="question") 
public class Question { 

@Id 
@GeneratedValue(strategy=GenerationType.AUTO) 
@Column(name="Qid") 
private Integer Qid; 

private String question; 

@ManyToOne(cascade=CascadeType.ALL) 
@JoinColumn(name="tempid") 
private Template template; 

@OneToMany(mappedBy="question", cascade=CascadeType.ALL) 
private Set<Choice> choices; 

public void addChoice(Choice choice){ 
    choices.add(choice); 
    choice.setQuestion(this); 
} 

public void setTemplate(Template template){ 
    this.template = template; 
    template.getQuestions.add(this); 
} 


@Entity 
@Table(name="choice") 
public class Choice { 

@Id 
@GeneratedValue(strategy=GenerationType.AUTO) 
private Integer Id; 

private String choice; 

private String status; 

private String description; 

@ManyToOne 
@JoinColumn(name="qid") 
private Question question; 

} 


Template template = //; 
Choice choice = //; 

Question question = new Question(); 
question.addChoice(choise); 
question.setTemplate(template); 

    public void insertQuestion(Question qn1) { 
    SessionFactory sf = Dbutil.getConnection(); 
    Session session = sf.openSession(); 
    Transaction tx = session.beginTransaction(); 

    session.save(qn1); 
    tx.commit(); 
} 
+0

謝謝你的答覆艾倫..但它不以我期望的方式工作。它不插入任何外鍵,並再次提供問題表 – prabhakaran 2014-10-29 10:28:40

+0

中的重複條目查看更新。通過設置級聯選項和設置關係的雙方,您應該可以撥打一個電話來保存問題,其他所有內容都應該保存。 – 2014-10-29 11:48:22