2

PropertyPath 类的构造函数中的变量 propertyName 的名称似乎不符合 JavaBeans 规范(8.8 推断名称的大写。)。

https://github.com/spring-projects/spring-data-commons/blob/master/src/main/java/org/springframework/data/mapping/PropertyPath.java

// PropertyPath Code: lines 73:
PropertyPath(String name, TypeInformation<?> owningType, List<PropertyPath> base) {
...
    String propertyName = name.matches(ALL_UPPERCASE) ? name : StringUtils.uncapitalize(name);
...
}

该代码意味着当名称与 ALL_UPPERCASE 不匹配时,第一个大写字母将更改为小写。

但是 JavaBeans 规范说:

JavaBeans Specification

Thus when we extract a property or event name from the middle of an existing Java name, 
we normally convert the first character to lower case. 
However to support the occasional use of all upper-case names, we check if the first 
two characters of the name are both upper case and if so leave it alone. 
So for example,
    “FooBah” becomes “fooBah”
    “Z” becomes “z”
    “URL” becomes “URL”

例如:如果我在一个类中有一个名为 [MCount] 的属性,那么根据 JavaBeans 规范,属性名称应该是 [MCount]。但是如果我使用下面的 [PropertyPath.from](它将调用 PropertyPath 构造函数)来获取属性,我会得到以下异常,因为属性名称已更改为 [mCount]。

PropertyPath property = PropertyPath.from("MCount", classType);

异常:java.lang.IllegalArgumentException:无法在此 ManagedType [类] 上找到具有给定名称 [mCount] 的属性...

有人有好的意见吗?谢谢!

4

1 回答 1

2

提交 0c4ed8a86a引入了此行为,以修复仅与所有大写属性名称有关的DATACMNS-257 。

如果您认为这是一个错误,请将其提交到问题跟踪器中。

于 2017-04-28T10:43:06.937 回答