小编adl*_*ler的帖子

JPA/hibernate排序集合@OrderBy vs @Sort

我想要一个订购的子对象(这里是cat-kitten示例)的集合.并继续增加新元素的顺序.

@Entity 
public class Cat {
  @OneToMany(mappedBy = "cat", cascade = CascadeType.ALL)
  @OrderBy("name ASC")
  private List<Kitten> kittens;

  public void setKittens(List<Kitten> kittens) { this.kittens = kittens; }
  public List<Kitten> getKittens() { return kittens; } 
}
Run Code Online (Sandbox Code Playgroud)

当我这样做时cat.getKittens.add(newKitten),名称将被打破.

是否有可能让hibernate完成保持集合总是有序的工作?通过使用@Sort hibernate注释?
@Sort的缺点在于它迫使你实现Comparable接口......什么是正确的'纯JPA'方法呢?将所有内容保存到数据库并重新加载?合并@ OrderBy和@Sort是否合理?

到目前为止,更新解决方案是将@OrderBy和@Sort结合起来.@OrderBy导致ORDER BY生成的SQL中的一个子句更好的性能(我假设java在插入到已排序的容器时再次"排序",但是这应该快得多,因为元素已经排序了)@Sort with an an实现的Comparable接口导致始终排序的容器.请注意,我现在使用SortedSet而不是List.这里更新的代码:

@Entity 
public class Cat {
  @OneToMany(mappedBy = "cat", cascade = CascadeType.ALL)
  @OrderBy("name ASC")
  @Sort(type = SortType.NATURAL)
  private SortedSet<Kitten> kittens;

  public void setKittens(SortedSet<Kitten> …
Run Code Online (Sandbox Code Playgroud)

collections hibernate jpa sorted sql-order-by

32
推荐指数
2
解决办法
7万
查看次数

Moxy,JSON和Jersey 2.0不会反序列化纯String字符串

在我目前的设置中,我使用Jersey 2.0和MOXy,如在球衣文档中所述.我完全依赖"Auto-Discoverable Features",所以我不使用任何额外的配置或JAXB注释.

我的任务是反序列化服务器端的字符串数组.客户端正在发送JSON消息:

["foo","bar"]
Run Code Online (Sandbox Code Playgroud)

在服务器端,以下方法头应该反序列化它:

@POST
@Path("/stringArray")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Response stringArray(List<String> stringList) {
   ...
}
Run Code Online (Sandbox Code Playgroud)

问题: stringList的内容为{null,null},因此元素的数量始终是正确的,但字符串设置为null.

使用小包装类也是如此.这里的课程:

public static class Data {
   public List<String> stringList;
}
Run Code Online (Sandbox Code Playgroud)

将methode签名更改为stringArray(数据数据)并将JSON消息更改为:

{"stringList": ["foo","bar"]}
Run Code Online (Sandbox Code Playgroud)

这两种方法有什么区别,我如何才能使普通字符串数组工作?

更新: 所述问题由@Blaise的回答修复.但序列化POJO列表的密切相关的问题仍然无效.信息:

[org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException:找不到媒体类型= application/json的MessageBodyWriter,type = class java.util.ArrayList,genericType = class java.util.ArrayList.]

我找到的唯一解决方案是再次使用包含List的小包装类...

json jersey moxy

5
推荐指数
1
解决办法
2260
查看次数

标签 统计

collections ×1

hibernate ×1

jersey ×1

jpa ×1

json ×1

moxy ×1

sorted ×1

sql-order-by ×1