在JSF的标签中,如果你用它来提供它 Map<Key, Value>
<h:selectOneMenu value="#{bean.integerProperty}">
<f:selectItems value="#{bean.mapProperty}"/>
</h:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)
生成的HTML将与人们期望的相反
<select>
<option selected="selected" value="MapValue1">MapKey1</option>
<option value="MapValue2">MapKey2</option>
<option value="MapValue3">MapKey3</option>
</select>
Run Code Online (Sandbox Code Playgroud)
在某种意义上,地图的值将在选项的值属性中设置,并且键将在其标签中设置.
我找到了这个JIRA JIRA 1808,其中解释了必须编写错误地图的含义(主要是唯一性),但不太明白为什么要纠正这个问题.
'破坏性和向后不兼容'.
这是来自以前版本的JSF吗?如果是这样,是否有人知道它是否有这样的理由?
只是好奇是否有解释不解决这个问题.
在使用条件查询获取列表属性时,我正在观察 JPA 2 中我认为的意外行为。
我的查询如下(摘录):
CriteriaBuilder b = em.getCriteriaBuilder();
CriteriaQuery<MainObject> c = b.createQuery(MainObject.class);
Root<MainObject> root = c.from(MainObject.class);
Join<MainObject, FirstFetch> firstFetch = (Join<MainObject, FirstFetch>) root.fetch(MainObject_.firstFetch);
firstFetch.fetch(FirstFetch_.secondFetch); //secondFetch is a list
c.select(root).distinct(true);
Run Code Online (Sandbox Code Playgroud)
(所以假设我正在获取一个列表作为对象属性的属性。)
问题是当查询返回多个结果时,secondFetch 值的重复次数与返回的行数相同。每个firstFetch应该只有一个secondFetch但有n。在这种情况下,我看到的唯一特殊之处是所有 MainObject碰巧都具有相同的 FirstFetch 实例。所以我的猜测是加入正在交叉,这是正常的,但后来JPA没有其分配secondFetch对象的每一个firstFetchs。
映射不应该太特别,或多或少是这样的
@Entity
@Table(name="mainobject")
public class MainObject{
//...
private FirstFetch firstFetch;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="mainObject_column")
public FirstFetch getFirstFetch() {
return firstFetch;
}
}
Run Code Online (Sandbox Code Playgroud)
和
@Entity
@Table(name="firstFetch")
public class FirstFetch{
//...
private List<SecondFetch> secondFetch;
@OneToMany(mappedBy="secondFetch") …Run Code Online (Sandbox Code Playgroud)