JPA,地图和广告订单

时间:2010-10-05 07:41:05

标签: java orm jpa

我的google-fu在此失败了。我正在做一个小型数据库应用程序,它从文件中读取一些数据以及我当前存储在我的实体中的Map中的一些元数据。我厌倦了它总是以随机顺序显示。

那么我可以以某种方式使用LinkedHashMap或@OrderColumn与地图保存插入顺序吗?

@Entity
public class MooData
{
    @OrderColumn
    @ElementCollection
    private List<BigDecimal> data;

    @ElementCollection
    private Map<String, String> properties;
}

2 个答案:

答案 0 :(得分:7)

我在JPA 2.0规范中找不到@OrderColumn注释应该适用于Map的任何证据。引用规范:

  

11.1.39 OrderColumn Annotation

     

OrderColumn注释指定了一个   用于维护的列   列表的持续排序。该   持久性提供者负责   维持秩序   检索和在数据库中。该   持久性提供者负责   用于更新订购   刷新到数据库来反映   任何插入,删除或重新排序   影响清单。 OrderColumn   可以在a上指定注释   一对多或多对多   关系或元素   采集。 OrderColumn   注释指定在   引用的关系   要订购的集合。该   订单列不可见   实体的状态或可嵌入的   类。

如果您想保留订单,请使用List(在您的情况下为Embeddable)。使用Map,可以按键访问值。

答案 1 :(得分:-1)

我的google-fu指向了一些页面,他们说@OrderColumn可以用于所有集合 - 所以听起来它不限于列表或集合。虽然到目前为止我找到的所有页面都有List个字段的示例。

eclipse WIKI@OrderColumn注释上有一篇很好的文章。


修改

如何解决方法 - 您可以向bean添加一个方法来获取映射条目集:

public Set<Map.Entry<?,?>> getPropertiesEntries() {
   Set<Map.Entry<?,?>> result = new TreeSet(myComparator);
   result.addAll(map.entrySet());
   return result;
}

并在遍历地图时使用此entrySet。