Сохранение сущности с несколькими ленивыми ассоциациями - PullRequest
0 голосов
/ 14 марта 2019

У меня есть сценарий, в котором мне нужно сохранить объект с несколькими ассоциациями, но я не хочу получать эти ассоциации, если в этом нет необходимости.

Я постараюсь привести простой пример:

Entites:

public class Foo {
    private Long idFoo;
    private String defaultMessage;

    /* Getters and Setters Ommited */   
}

public class Bar {
    private Long idBar; 
    private String message;

    /*one-to-one lasy assoc*/   
    private Foo foo;

    /* Getters and Setters Ommited */
}

Бар входной DTO

Public class BarInputDTO {
    private String message;
    @NotNull
    private idFoo;

    /* Getters and Setters Ommited */
}

Служба сохранения Бар

public void saveAsEntity(BarInputDTO dto) {
        Bar bar = new Bar();

        //Getting a reference do foo            
        bar.setFoo(fooRepository.getOne(dto.getIdFoo()));           

        if (dto.getMessage().equals("")) {
                /*
                * I just want to load the association if there is no message.
                * but get - LazyInitializationException: could not initialize proxy - no session
                */
                bar.setMessage(bar.getFoo().getDefaultMessage());
        } else {
                bar.setMessage(dto.getMessage);
        }

        barRepository.save(bar);
}

Как говорится в комментарии, я просто хочу загрузить ассоциацию, если нет сообщения. Но в этой ситуации я получаю LazyInitializationException. Если сообщение информировано, Бар сохраняется.

Я понимаю, что fooRepository.getOne открывает и закрывает транзакцию, когда она вызывается, тогда, когда я вызываю getDefaultMessage, сеанса нет. Я предполагал, что добавление аннотации @Transaction к методу решит проблему, но я ошибся.

Конечно, я мог бы получить объект Foo непосредственно из fooRepo внутри предложения if, но мой реальный сценарий немного сложнее, и это было бы очень повторяющейся задачей.

Что-то мне не хватает, чтобы это работало?

Tks!

...