hibernate许多对很多只插入学生和映射表

时间:2013-11-19 11:13:12

标签: java hibernate orm mapping

我有学生,考试和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)中插入一条记录,它不应该更新测试表中的记录。

2 个答案:

答案 0 :(得分:1)

我想,你忘了开始交易。在saveUpdate

之前添加以下行
   session.getTransaction().begin();

答案 1 :(得分:0)

除了您的事务管理之外,每件事情似乎都没问题。但是我没有看到您的已发布代码中的事务已打开,但您只有事务提交..您可以进行更改并再次进行测试吗?

干杯!