카테고리 없음

[자바] WARN [CommonsLogger.java:60] ognl.MethodFailedException : [java.lang.NoSuchMethodException : ([Ljava.lang.String;)] 객체에 대한 메소드 실패

행복을전해요 2021. 1. 26. 23:45

당신이 직면하고있는 문제 setCreateDate()는 예상 되는 논쟁과 관련이있는 것 같습니다 . 메서드가 setCreateDate(Date)와 호환되지 않으므로 선언되었으므로 setCreateDate(String)양식을 제출할 때 호출 될 것으로 예상됩니다.

현재 모델 객체를 업데이트하려면 제출 된을 사용하여 DB에서 검색 Id하고 관련 필드를 업데이트 한 다음을 호출해야 session.update()합니다. 코드는 다음과 같습니다.

public void updateUserInfo(User user) {
    Session s = getSession();
        Transaction t = s.beginTransaction();
            User u = (User) s.load(User.class, user.getId());
                u.setAddress(user.getAddress());
                    u.setEmail(user.getEmail());
                        s.update(u);
                            t.commit();
                                closeSession();
                                }
                                

엔티티를 지속하기 직전에 필드를 업데이트하는 Hibernate 리스너에 대한 추가 정보. createDate레코드가 유지되기 직전에 필드 를 설정하려면 다음을 사용할 수 있습니다.

@PrePersist
protected void onCreate() {
    createDate = new Date();
    }
    

@PrePersist주석이 달린 메소드 @PreUpdate는 Hibernate가 처음으로 엔티티를 유지하거나 업데이트하기 직전에 호출됩니다. 여기에서 자세한 정보를 얻을 수 있습니다 .

편집 : 나는 당신이 Session APIHibernate를 사용하고 있음 알았습니다 . 이 경우 위의 제안이 작동하지 않습니다. 현재 구현에서 작동하게하려면 Hibernate 이벤트 API를 사용해야합니다 .

먼저, 지속되기 직전에 업데이트해야하는 개체에 대한 인터페이스를 만듭니다 (이와 같이).

public interface Dateable {

    void setCreateDate(Date date);
    }
    

User해당 인터페이스를 구현하도록 클래스를 수정하십시오 .

public class User implements Dateable {
   //...
   }
   

그런 다음 on 엔티티 Listener를 수신 하고 create 속성을 수정하는를 만듭니다.SaveOrUpdateEventDateable

import org.hibernate.event.SaveOrUpdateEvent;
import org.hibernate.event.def.DefaultSaveOrUpdateEventListener;

public class SaveOrUpdateDateListener extends DefaultSaveOrUpdateEventListener {

    @Override
        public void onSaveOrUpdate(SaveOrUpdateEvent event) {
                if (event.getObject() instanceof Dateable) {
                            Dateable record = (Dateable) event.getObject();
                                        record.setCreateDate(new Date());
                                                }
                                                        super.onSaveOrUpdate(event);
                                                            }
                                                            }
                                                            

마지막으로 다음을 통해 위의 리스너를 구성합니다. hibernate.cfg.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
   <session-factory>
         .....       
                 <event type="save-update">
                             <listener class="SaveOrUpdateDateListener"/>
                                     </event>
                                         </session-factory>
                                         </hibernate-configuration>
                                         


출처
https://stackoverflow.com/questions/22029798