データベースから遅延ロードされたオブジェクトに関連する問題に対処しています。
以下のエンティティがあるとしましょう。
@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 を発生させずにすべてのユーザーを取得するための最良の方法はどれでしょうか?
編集:解決策
次のデータモデルがあるとしましょう
public class User{
private String name;
//... other fields
@OneToMany
private Set<Address> addresses;
}
- アドレスなしのクエリ、例外: モデルから DTO にマッピングする場合、マッピングを試みます
addresses
が、(hibernate またはその他のフレームワークを介して) 遅延ロードされるため、例外が発生します。
さらにaddresses
、 @Mehmet Bektaş のように、マップされている from を無視できます。ただし、 を定義する必要はありませんsource
。オプションです。
@Mapping(target = "addresses", ignore = true)
- リレーションシップの取得: これが方法です。
join
クエリに a を追加するaddresses
と、Mapstruct が残りを行います。