2016-03-15 3 views
2

Я имею дело с проблемой, связанной с ленивыми загруженными объектами из базы данных.Как управлять ленивой загрузкой в ​​Mapstruct?

Предположим, что у нас есть сущность ниже.

@Entity(name = "User") 
@Table(name = "USERS") 
public class User{ 
    @Id 
    @GeneratedValue 
    private int id 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name="NOTES_ID") 
    private List<Note> notes; 
} 

И Dto будет

@Mapper 
public interface UserDtoMapper{ 

    /** the INSTACE HERE **/ 

    User fromDto(UserDto dto); 

    UserDto toDto(User user); 

} 

Так, которые могли бы быть лучшим подходом для получения всех пользователей без иметь EJBException, потому что я подгружать их лени?

+0

Извлечь все необходимые данные в одну и ту же транзакцию. Таким образом, исключений, связанных с ленивой загрузкой, не будет. –

+0

Где (в каком прикладном уровне) вы выполняете сопоставление? Это должно произойти как часть транзакции в идеале, или вы указываете граф сущности, который гарантирует, что все отношения, которые будут отображаться, будут загружены. – Gunnar

ответ

0

Вы можете использовать Mapstruct для Lazy. Загружать все объекты, которые вы хотите, когда он делает сопоставление (при условии, что сеанс по-прежнему активен). Выгруженные прокси, которые вы не хотите, можно игнорировать, используя аннотацию игнорирования. Подробнее здесь. Can MapStruct do a deep deproxy of Hibernate Entity Classes

Смежные вопросы