小编com*_*e N的帖子

f:从地图馈送时,selectItem的键和值被反转

在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吗?如果是这样,是否有人知道它是否有这样的理由?

只是好奇是否有解释不解决这个问题.

dictionary selectonemenu jsf-2

6
推荐指数
1
解决办法
8927
查看次数

jpa标准查询获取列表中的重复值

在使用条件查询获取列表属性时,我正在观察 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)

java jpa list criteriaquery

4
推荐指数
1
解决办法
1万
查看次数

标签 统计

criteriaquery ×1

dictionary ×1

java ×1

jpa ×1

jsf-2 ×1

list ×1

selectonemenu ×1