我有学生,考试和student_test表,有多对多的关系。
测试:
@Entity
@Table(name = "TEST")
public class Test
{
@Id
@Column(name = "TEST_ID")
@GeneratedValue
private Long testId;
@Column(name = "SUBJECT")
private String subject;
@Column(name = "MAX_MARKS")
private String maxMarks;
@Column(name = "MARKS_OBTAINED")
private String marksObtained;
@Column(name = "RESULT")
private String result;
@ManyToMany(fetch = FetchType.LAZY,
mappedBy = "test",
cascade= {CascadeType.PERSIST})
private Set<Student> student = new HashSet<Student>();
}
学生:
@Entity
@Table(name = "STUDENT")
public class Student
{
@Id
@Column(name = "STUDENT_ID")
@GeneratedValue
private Long studentId;
@Column(name = "FIRSTNAME")
private String firstname;
@Column(name = "LASTNAME")
private String lastname;
@Column(name = "EMAIL")
private String email;
@Column(name = "PHONE")
private String phone;
@ManyToMany(cascade = { CascadeType.ALL })
@JoinTable(name = "STUDENT_TEST",
joinColumns = { @JoinColumn(name = "STUDENT_ID", updatable = false) },
inverseJoinColumns = { @JoinColumn(name = "TEST_ID", updatable = false) })
private Set<Test> test = new HashSet<Test>();
}
我已经分别创建了测试记录。 现在我想插入一个有关系记录的学生。
以下代码正在尝试 更新学生记录 更新测试记录 在关系表(student_test)中插入记录。
Test test1 = new Test();
test1.setTestId(Long.valueOf("3"));
student1.getTest().add(test1);
student1.setStudentId(Long.valueOf("1"));
try
{
session.saveOrUpdate(student1);
}
catch (HibernateException e)
{
e.printStackTrace();
}
session.getTransaction().commit();
session.close();`
我的问题是,我只需要在学生和关系表(student_test)中插入一条记录,它不应该更新测试表中的记录。
答案 0 :(得分:1)
我想,你忘了开始交易。在saveUpdate
session.getTransaction().begin();
答案 1 :(得分:0)
除了您的事务管理之外,每件事情似乎都没问题。但是我没有看到您的已发布代码中的事务已打开,但您只有事务提交..您可以进行更改并再次进行测试吗?
干杯!