Quantcast
Channel: BTSoru.com - Bilisim ve Yazilim Teknolojileri Soru/Cevap Platformu - latest questions
Viewing all articles
Browse latest Browse all 4270

Veritabanından "Entity" nasıl silinir? (Hibernate-JSF-Spring)

$
0
0

Merhaba, JSF-hibernate-spring üzerinde çalışıyorum. Veritabanından kayıt silme ile ilgili aşağıdaki gibi problemim var..

Student.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 metodları

StudentDAO.java

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

    @PersistenceContext
    EntityManager em;

    @Override
        public void deleteStudent(Student student) {
        Student silinecek = em.getReference(Student.class, student.getId());
        em.remove(silinecek);
        System.out.println("### studentDAO deleteStudent metodunda çıkıldı ###");

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("### StudentController deleteStudent metodundan çıkılıyor ### ");
 }

index.xhtml

<h:form>
        <p:outputLabel value="silinecek öğrenci id"/>
        <p:inputText value="#{studentController.student.id}"/>
        <p:commandButton value="Kaydı Sil"  action="#{studentController.deleteStudent()}" />
    </h:form>

bu kodlara göre çalıştırdığım zaman studentDAO'dan "### StudentController deleteStudent metodundan çıkılıyor ###" çıktısı alıyorum. Ancak kayıt silinmiyor.

Başta studentDAO;

@Override
public void deleteStudent(Student student) {
em.remove(student);
System.out.println("### studentDAO deleteStudent metodunda çıkıldı ###");

şeklindeydi bu haldeyken: "java.lang.IllegalArgumentException: Removing a detached instance" hatası alıyordum. Biraz baktım bu hata için; "her dao metodu farklı bir entity maneger session açar" gibi bir bildirim gördüm.

    @Override
        public void deleteStudent(Student student) {
        Student silinecek = em.getReference(Student.class, student.getId());
        em.remove(silinecek);

şeklinde yazılması gerektiği söyleniyordu. Bu şekilde ise kayıt silinmiyor. Halbuki deleteStudent metodundan çıkılıyor.

Transaction ile ilgili gözden kaçırdığım ya da bilmediğim bir şey olabilir diye düşünüyorum. Bu konudaki önerileriniz nelerdir ?

Bir de findStudent() ve updateStudent() metodu için nasıl bir yol izlemeliyim?

Teşekkürler..


Viewing all articles
Browse latest Browse all 4270

Trending Articles


Mide ağrısı için


Alessandra Torre - Karanlık Yalanlar


Şekilli süslü hazır floodlar


Flatcast Güneş ve Ay Flood Şekilleri


Gone Are the Days (2018) (ENG) (1080p)


Yildiz yükseltme


yc82


!!!!!!!!!! Amın !!!!!!!!!


Celp At Nalı (Sahih Tılsım)


SCCM 2012 Client Installation issue