[자바] WARN [CommonsLogger.java:60] ognl.MethodFailedException : [java.lang.NoSuchMethodException : ([Ljava.lang.String;)] 객체에 대한 메소드 실패
당신이 직면하고있는 문제 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 API
Hibernate를 사용하고 있음 을 알았습니다 . 이 경우 위의 제안이 작동하지 않습니다. 현재 구현에서 작동하게하려면 Hibernate 이벤트 API를 사용해야합니다 .
먼저, 지속되기 직전에 업데이트해야하는 개체에 대한 인터페이스를 만듭니다 (이와 같이).
public interface Dateable {
void setCreateDate(Date date);
}
User
해당 인터페이스를 구현하도록 클래스를 수정하십시오 .
public class User implements Dateable {
//...
}
그런 다음 on 엔티티 Listener
를 수신 하고 create 속성을 수정하는를 만듭니다.SaveOrUpdateEvent
Dateable
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