0

私はhibernate-spring tirpleが初めてです..

私は単純なレジスタブックをコーディングしようとしています..私は次のコードを持っています:

学生.java

@Entity(name = "STUDENTS")
@NamedQueries({
    @NamedQuery(name = "getAllStudent", query = "SELECT k FROM STUDENTS k ORDER BY k.id DESC"),
    @NamedQuery(name = "findByName", query = "SELECT k FROM STUDENTS k WHERE k.name LIKE :name")
})
public class Student {

    @Column(name = "STUDENTNO", nullable = false)
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    @Column(name = "NAME", nullable = false)
    private String name;
    @Column(name = "SURNAME")
    private String surname;
    @Column(name = "AGE")
    private String age;
    // GET ve SET metods

StduentDAO.java

@Repository
@Transactional(readOnly = true)
public class StudentDAO implements IStudentDAO {

    @PersistenceContext
    EntityManager em;

    @Override
        public void deleteStudent(Student student) {
        Student temp = em.getReference(Student.class, student.getId());
        em.remove(temp);
        System.out.println("### getting out from studentDAO deleteStudent method ###")

StudentController.java

@Component
@Scope(value = "request")
public class StudentController {

@Autowired
IStudentDAO studentDAO;
List<Student> allStudentList = new ArrayList();
Student student = new Student();

@PostConstruct
 private void loadStudents() {
 allStudentList = studentDAO.allStudent();

 public void deleteStudent() {
 studentDAO.deleteStudent(student);
 System.out.println("### getting out from StudentController deleteStudent method ### ");
 }

deleteStudent()コードを実行すると、次のようになります。

「### StudentDAO から抜け出す deleteStudent メソッド ###」

"### StudentController deleteStudent メソッドから抜け出す ### "

これらは出力に表示されますが、データベースから何も削除されていません..少し検索したところ、「すべてのエンティティマネージャーのメソッドが独自のセッションを開く」ことがわかりました。そのため、StudentDAO の deleteStudent メソッドを上記のように記述する必要があります。

私はtransacitonについて何かが欠けていると思いますが、まだ認識していません..

これについてどうすればいいですか?

ありがとう..

4

1 に答える 1

0

@Transactional アノテーションは、DBMS でトランザクションを作成します。

(readOnly = true) を使用すると、DB での操作を防止できます (INSERT/UPDATE/DELETE として)。

readOnly = true を削除して、delete メソッドが機能するようにします。

于 2013-11-12T12:03:42.747 に答える