2014-10-29 2 views
0

내 시나리오는 템플릿, 질문 및 선택 테이블이 3 개 있습니다.최대 절전 모드로 여러 테이블에 레코드 삽입

여기 템플릿에는 많은 질문이 있고 질문에는 선택 사항이 많으며 선택 필드에는 기타 입력란이 있습니다.

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 ************

최대 절전 모드 : 선택 사항으로 삽입 (선택, 설명, 질문, 대답최대 절전 모드 : 질문 (질문, 임시 값) 값 (?,? ?,?,?) 최대 절전 모드 : 업데이트 선택 설정 qid =? 여기서 Id =? 최대 절전 모드 : 템플릿 (임시) 값 (?)에 삽입 최대 절전 모드 : 질문 (질문, 임시 값) 값 (?,?) 삽입 최대 절전 모드 : 질문 집합 업데이트 tempId =? 여기서 Qid =? 많은 매핑

****** 질문 테이블 이미지 ****** enter image description here

+0

하나를 사용. –

+0

1 to n을 사용하는 동안 질문 테이블에 중복 삽입이 발생하는 이유는 무엇입니까? – prabhakaran

+0

노력하고있는 것을보아야합니다. –

답변

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

의 답변을 Alan에게 보내 주신 코드를 확인해주십시오.하지만 예상대로 작동하지 않습니다. 그것은 외래 키를 삽입하지 않고 다시 질문 테이블에 중복 항목을 제공합니다. – prabhakaran

+0

업데이트 됨. 계단식 옵션을 설정하고 관계 쌍방을 설정하면 질문 저장을 한 번 호출 할 수 있어야하고 나머지는 저장해야합니다. –

관련 문제