Dor*_*age 9 hibernate lazy-loading java-ee-7 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;
}
Run Code Online (Sandbox Code Playgroud)
而 Dto 将是
@Mapper
public interface UserDtoMapper{
/** the INSTACE HERE **/
User fromDto(UserDto dto);
UserDto toDto(User user);
}
Run Code Online (Sandbox Code Playgroud)
那么哪个可能是获取所有用户而没有 EJBException 的最佳方法,因为我正在获取他们懒惰?
编辑:解决方案
假设您有以下数据模型
@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;
}
Run Code Online (Sandbox Code Playgroud)
addresses但因为延迟加载(通过休眠或任何其他框架)最终会出现异常。此外,您可以忽略addressesfrom 被映射,如@Mehmet Bekta?. 但不需要定义source,它是可选的。
@Mapper
public interface UserDtoMapper{
/** the INSTACE HERE **/
User fromDto(UserDto dto);
UserDto toDto(User user);
}
Run Code Online (Sandbox Code Playgroud)
join来查询addresses,Mapstruct 将完成剩下的工作。您可以使用 Mapstruct 在进行映射时延迟加载所需的所有实体(假设会话仍处于活动状态)。您不需要的已卸载代理可以通过使用忽略注释来忽略。更多详细信息请参见此处。 MapStruct 可以对 Hibernate 实体类进行深度代理吗
| 归档时间: |
|
| 查看次数: |
6756 次 |
| 最近记录: |