【发布时间】:2014-10-30 04:31:14
【问题描述】:
我的场景是我有三个表格模板、问题和选择。
这里的模板将有很多问题,问题将有很多选择,选择表中的其他字段。
我在 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 显示 ************
Hibernate:插入选择(选择,描述,qid,状态)值(?,?,?,?) 坚定的 Hibernate:插入问题(question,tempid)值(?,?) 休眠:插入选择(选择,描述,qid,状态)值(?,?,?,?) Hibernate:更新选择集 qid=? ID =? 休眠:插入模板(临时)值(?) Hibernate:插入问题(question,tempid)值(?,?) Hibernate:更新问题集 tempId=? Qid=?
******问题表图片******
【问题讨论】:
-
使用一对多映射。
-
在使用 1 到 n 时,我在问题表中得到重复插入,我不知道为什么?
-
需要看看你在尝试什么。
-
展示你如何插入/更新你的实体
-
@pomkine 请检查我更新的代码