Java 推土机映射JodaTime属性未按预期工作
我正在使用Dozer在Document类和DocumentManagementBean类之间映射,这两个类都是我自己创建的。两者都有一个Joda DateTime类型的属性,包括getter和setter,称为dateAdded 当文档对象Java 推土机映射JodaTime属性未按预期工作,java,mapping,jodatime,dozer,Java,Mapping,Jodatime,Dozer,我正在使用Dozer在Document类和DocumentManagementBean类之间映射,这两个类都是我自己创建的。两者都有一个Joda DateTime类型的属性,包括getter和setter,称为dateAdded 当文档对象d具有属性dateAdded=x时,调用mapper.map(d,DocumentManagementBean.class)所有字段都会正确自动映射(因为我完全控制代码库,所以我可以不使用推土机配置,只依赖匹配的属性名称),除了dateAdded字段,其中,新
d
具有属性dateAdded
=x时,调用mapper.map(d,DocumentManagementBean.class)
所有字段都会正确自动映射(因为我完全控制代码库,所以我可以不使用推土机配置,只依赖匹配的属性名称),除了dateAdded
字段,其中,新的DocumentManagementBeandmb
在其dateAdded
属性中以currentDateTime结束,而不是d
对象中的x
我在等推土机打电话来
dmb.setDateAdded(d.getDateAdded())代码>
只需将dateAdded的值从源代码带到目标代码,但它似乎是在为dmb对象创建新的DateTime,然后就不用管它了
有人能帮我解释一下吗?可以这样做,但您必须添加一些配置:
<field>
<a set-method="placeValue" get-method="buildValue">value</a>
<b>value</b>
</field>
Dos有人知道如何使用注释进行TIN吗?基本问题是,Dozer通过new DateTime()创建了一个新的DateTime空实例,这就是如何使用当前日期/时间而不是原始日期/时间结束的。可能有多种解决方案,我通常使用customconverter,全局定义:
<converter type="de.kba.resper.customconverter.DateTimeCustomConverter">
<class-a>org.joda.time.DateTime</class-a>
<class-b>org.joda.time.DateTime</class-b>
</converter>
org.joda.time.DateTime
org.joda.time.DateTime
及
公共类DateTimeCustomConverter扩展DozerConverter{
公共DateTimeCustomConverter(){
super(DateTime.class,DateTime.class);
}
@凌驾
公共日期时间转换器(最终日期时间源、最终日期时间目标){
if(source==null){
返回null;
}
返回新的日期时间(源);
}
@凌驾
公共日期时间转换源(最终日期时间源、最终日期时间目标){
if(source==null){
返回null;
}
返回新的日期时间(源);
}
}
不过,它可能会做得过火:)您可能不再需要它,但Dozer提供了通过引用复制对象的机会,至少在最新版本(现在,该版本是5.4.0)中是这样。通过引用复制是您正在寻找的
<field copy-by-reference="true">
<a>copyByReference</a>
<b>copyByReferencePrime</b>
</field>
在xml文件中设置“按引用复制”全局属性
<copy-by-references>
<copy-by-reference>
org.joda.time.LocalDate
</copy-by-reference>
<copy-by-reference>
org.joda.time.LocalDateTime
</copy-by-reference>
</copy-by-references>
org.joda.time.LocalDate
org.joda.time.LocalDateTime
我认为根本原因是DateTime是不可变的,因此无法进行深度复制(请参阅)
这就是为什么您必须使用转换器或通过引用复制它。谢谢,我提出了类似的方法,但觉得不太正确,所以请等待是否有人可能提供更清洁的解决方案。再次感谢!因为DateTime是不可变的,所以推土机转换器没有意义。因此,通过引用复制的解决方案应该比定制的ConverterYep更受欢迎,这是一种简单的解决方案,对不可变项非常有效。Merci Pras,t'es mon héros:)这个解决方案对我来说是最干净的解决方案
<copy-by-references>
<copy-by-reference>
org.joda.time.LocalDate
</copy-by-reference>
<copy-by-reference>
org.joda.time.LocalDateTime
</copy-by-reference>
</copy-by-references>