Dorado使用PropertyUtils来获取实体属性,但是会将一些与非实体属性的Get/Set方法也判断为属性,如Menu实体有isRoot及isLeaf两个方法,Dorado会生成root与leaf两个属性,而真实的实体中并没有这两个属性。为了解决这个问题,需要新建一个MyDefaultEntityDataType类并覆盖EntityDataTypeSupport类中的doCreatePropertyDefinitons方法:
public class MyDefaultEntityDataType extends EntityDataTypeSupport {
@Override
protected void doCreatePropertyDefinitons() throws Exception {
Class<?> type = getMatchType();
if (type == null) {
type = getCreationType();
}
if (type == null || type.isPrimitive() || type.isArray()
|| Map.class.isAssignableFrom(type)) {
return;
}
/* 获取类的所有真实属性Map */
Map<String, Field> fields = ReflectUtils.getFields(type);
PropertyDescriptor[] propertyDescriptors = PropertyUtils.getPropertyDescriptors(type);
for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
String name = propertyDescriptor.getName();
/* 判断Property是否存在实际的Field字段,如果不存在则忽略之 */
if (!fields.containsKey(name))
continue;
if (!BeanPropertyUtils.isValidProperty(type, name))
continue;
... ...
}
}
}
在定义实体的超类AbstractEntity(其他Dorado实体都继承该类)时,将其impl属性设置为xxx.xxx.MyDefaultEntityDataType即可。