вложенным исключением является java.lang.IllegalStateException :Невозможно преобразовать значение типа [java.lang.String] в требуемый тип

Я получаю следующую ошибку проверки, когда пытаюсь отправить форму. Выпадающий список, заполненный значениями из Document.java, выдает эту ошибку:

Failed to convert property value of type java.lang.String to required type 
testapp.domain.Document for property document_number; nested exception is 
java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] 
to required type [testapp.domain.Document] for property document_number: no matching 
editors or conversion strategy found

Что-то не так с моим отображением?

Отображение Document.java

    @OneToMany(mappedBy="document_number", cascade = CascadeType.ALL)
private Set documentRevisions;

public void setDocumentRevisions(Set documentRevisions){
    this.documentRevisions = documentRevisions;
}

Отображение DocumentRevision.java

    @ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name="DOCUMENT_NUMBER")
private Document document_number; 

public void setDocument_number(Document document_number){
    this.document_number = document_number;
}

public Document getDocument_number(){
    return document_number;
}

Связь между двумя таблицами заключается в том, что несколько DocumentRevisions могут иметь один и тот же DocumentNumber , но один DocumentRevision может иметь только один DocumentNumber

Спасибо за помощь

/D

Изменить

Я использую spring 3.0 и hibernate 3. Вот недавний поток от меня, который включает в себя контроллер и страницу jsp.

Редактировать 2

Вот метод реализации DAO, который должен сохранить номер документа _в DocumentRevision

    public void saveDocumentRevision(DocumentRevision documentRevision) {
    this.sessionFactory.getCurrentSession().save(documentRevision); 
}

Редактировать 3

Я считаю, что это часть кода, где номер документа _должны быть записаны. Должен ли я использовать «documentNumberList» где-то в методе.POST? Как бы я поступил в таком случае?

часть контроллера:

@RequestMapping(value="/add", method=RequestMethod.GET)
public String getDocumentRevision(Model model) {
DocumentRevision documentRevision = new DocumentRevision();
model.addAttribute("documentRevisionAttribute", documentRevision);
model.addAttribute("documentNumberList", documentService.retrieveAllDocumentNumbers());

return "new-documnent-revision";
}


@RequestMapping(value="/add", method=RequestMethod.POST)
public String postDocumentRevision(@ModelAttribute("documentRevisionAttribute") @Valid DocumentRevision documentRevision, BindingResult result) {

if(result.hasErrors()){
    return "new-document-revision";
}

documentRevisionService.createDocumentRevision(documentRevision);
return "redirect:/testapp/document-revision/list";  
}

Обновление

Я добавил следующее в свой контроллер:

    /**
 * Property editor to map Documents from documents IDs.
 */

 class DocumentPropertyEditor extends PropertyEditorSupport {

    @Override
    public void setAsText(String text) throws IllegalArgumentException {
        Document value =  documentService.retrieveDocumentNumber(text);
        setValue(value);
    }

    @Override
    public String getAsText() {
        Document d = (Document) getValue();
        return d != null ? String.valueOf(d.getDocumentNumber()) : "";
    }

}


@InitBinder
public void initBinder(WebDataBinder binder) {
    binder.registerCustomEditor(Document.class, new DocumentPropertyEditor());
}

Теперь я получаю NullPointerException:

java.lang.NullPointerException
testapp.controller.DocumentRevisionController$DocumentPropertyEditor.getAsText(DocumentRevisionController.java:59)

Почему геттер в PropertyEditor не получает значение?

Редактировать 4

метод retrieveDocumentNumber (text ):

    public Document retrieveDocumentNumber(String text){
    return (Document) this.sessionFactory.getCurrentSession().get(Document.class, text);
}

6
задан Community 23 May 2017 в 11:51
поделиться