假设我有以下类:集合映射
class A1 {
List<B1> bList;
}
class B1 {
Long id;
}
---
class A2 {
List<Long> bList;
}
我想A1级映射到A2与推土机,其中A1.bList包含B1对象和A2.bList只包含B1对象的ID。
映射的外观如何?
谢谢。
假设我有以下类:集合映射
class A1 {
List<B1> bList;
}
class B1 {
Long id;
}
---
class A2 {
List<Long> bList;
}
我想A1级映射到A2与推土机,其中A1.bList包含B1对象和A2.bList只包含B1对象的ID。
映射的外观如何?
谢谢。
我想你可以尝试设置Long
到B1
的映射。如果我没有记错,这只有一种方法,我不记得是哪一种方式。对不起,希望这有助于。
您可以使用推土机自定义转换器。 Dozer customer converter
一个例子:(可能出现的错误,没有编译或测试)
<mapping>
<class-a>A1</class-a>
<class-b>A2</class-b>
<field custom-converter="converters.YourCustomConverter">
<a>bList</a>
<b>bList</b>
</field>
</mapping>
定制转换器:
public class YourCustomConverter implements CustomConverter {
public Object convert(Object destination, Object source, Class destClass, Class sourceClass) {
if (source == null) {
return null;
}
if (source instanceof List<?>) {
List<?> list = ((List<?>) source);
if (list.isEmpty()) {
return null;
}
if (list.get(0) instanceof B1) {
List<Long> longList = new ArrayList<Long>();
for (B1 b1 : list) {
longList.add(b1.getId());
}
return longList;
} else (list.get(0) instanceof Long) {
// do the inverse of the above
} else {
throw new MappingException("Wrong type ...");
}
} else {
throw new MappingException("Converter YourCustomConverter used incorrectly. Arguments passed in were:"
+ destination + " and " + source);
}
}
}
我想你可以通过overridding 的toString做到这一点()方法B1它会工作。
这里的示例代码:
@Override
public String toString() {
return new String(this.id);
}
而在你的映射做了以下变化:
<field>
<a>bList</a>
<b>bList</b>
<a-hint>B</a-hint>
<b-hint>java.lang.Long<b-hint>
</field>
所以,当推土机试图绑定B1,它将返回其ID为String,然后推土机将执行String和Long之间的自动转换。
你能说明如何设置long和B1之间的映射关系吗? – 2012-05-31 05:44:48