MapStruct 能否对 Hibernate 实体进行深度代理 类
Can MapStruct do a deep deproxy of Hibernate Entity Classes
对于想要直接 return 实体 类 的 Web 服务开发人员来说,这是一个常见问题。即使加载了我需要的所有数据,仍然有许多我不需要的未初始化代理和集合。我希望他们只是 return null 而不是抛出延迟加载异常。基本上我只想要 POJO 合同,但是必须清除代理和休眠集合才能获得它(除非休眠中有一些我不知道的新方法)。我可以使用 MapStruct 来执行此操作吗?
如有需要,可提供更多详细信息:
http://www.mojavelinux.com/blog/archives/2006/06/hibernate_get_out_of_my_pojo/
http://www.gwtproject.org/articles/using_gwt_with_hibernate.html
Gilead 是我发现唯一对此有效的药物,但它已不复存在。
是的,您可以使用 MapStruct 做到这一点。但是,只有明确标记要映射的内容和要忽略的内容。
假设你有这个 类:
public class Car {
private String name;
private int year;
//This is lazy loaded
private List<Wheel> wheels;
//getters and setters omitted for simplicity
}
public class Wheel {
private boolean front;
private boolean right;
//getters and setters omitted for simplicity
}
您将需要一个如下所示的映射器:
@Mapper
public interface CarMapper {
@Mapping(target="wheels", ignore=true)
Car mapWithoutWheels(Car car);
Car mapWithWheels(Car car);
List<Wheel> map(List<Wheel> wheels);
Wheel map(Wheel wheel);
}
如果要强制 MapStruct 创建新对象而不进行直接映射,则需要 List<Wheel>
和 Wheel
的显式映射。目前,如果 MapStruct 发现源类型和目标类型相同,它会直接赋值(对于列表,它将创建一个新列表,但不会在列表的元素中调用 getter)。
如果 Wheel
有一些延迟加载的元素,那么你可以有 2 种映射方法 Wheel
,你将不得不使用 selection based on qualifiers
对于想要直接 return 实体 类 的 Web 服务开发人员来说,这是一个常见问题。即使加载了我需要的所有数据,仍然有许多我不需要的未初始化代理和集合。我希望他们只是 return null 而不是抛出延迟加载异常。基本上我只想要 POJO 合同,但是必须清除代理和休眠集合才能获得它(除非休眠中有一些我不知道的新方法)。我可以使用 MapStruct 来执行此操作吗?
如有需要,可提供更多详细信息:
http://www.mojavelinux.com/blog/archives/2006/06/hibernate_get_out_of_my_pojo/
http://www.gwtproject.org/articles/using_gwt_with_hibernate.html
Gilead 是我发现唯一对此有效的药物,但它已不复存在。
是的,您可以使用 MapStruct 做到这一点。但是,只有明确标记要映射的内容和要忽略的内容。
假设你有这个 类:
public class Car {
private String name;
private int year;
//This is lazy loaded
private List<Wheel> wheels;
//getters and setters omitted for simplicity
}
public class Wheel {
private boolean front;
private boolean right;
//getters and setters omitted for simplicity
}
您将需要一个如下所示的映射器:
@Mapper
public interface CarMapper {
@Mapping(target="wheels", ignore=true)
Car mapWithoutWheels(Car car);
Car mapWithWheels(Car car);
List<Wheel> map(List<Wheel> wheels);
Wheel map(Wheel wheel);
}
如果要强制 MapStruct 创建新对象而不进行直接映射,则需要 List<Wheel>
和 Wheel
的显式映射。目前,如果 MapStruct 发现源类型和目标类型相同,它会直接赋值(对于列表,它将创建一个新列表,但不会在列表的元素中调用 getter)。
如果 Wheel
有一些延迟加载的元素,那么你可以有 2 种映射方法 Wheel
,你将不得不使用 selection based on qualifiers