【发布时间】:2014-06-20 13:23:38
【问题描述】:
我会尽量把问题表述得更简单:
@Entity
public class One implements Serializable {
...
@Id
@GeneratedValue
private Long id;
@OneToMany
@OrderBy("name ASC")
private List<Many> many;
...
首先,我用一些多实体填充列表并保持单实体。其次,我检索(em.find)期望列表按Many#name升序排列的单一实体,但它不是按名称排序的。该列表按 id 排序。如有必要,完整代码见下文。
几天前的原帖:
我正在使用当前的 Netbeans Glassfish 包。
产品版本:NetBeans IDE 8.0(内部版本 201403101706) 更新:NetBeans IDE 已更新至 NetBeans 8.0 Patch 2 版本 爪哇:1.7.0_51; Java HotSpot(TM) 64 位服务器 VM 24.51-b03 运行时:Java(TM) SE 运行时环境 1.7.0_51-b13 系统:在 x86_64 上运行的 Mac OS X 版本 10.9.3; UTF-8; de_DE (nb)
JPA @OrderBy 注释被完全忽略。
@Entity
public class One implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private Long id;
@OneToMany
@OrderBy("name ASC")
private List<Many> many;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public List<Many> getMany() {
return many;
}
public void setMany(List<Many> many) {
this.many = many;
}
}
众多实体
@Entity
public class Many implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private Long id;
private String name;
public Many() {
}
public Many(String name) {
this.name = name;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
服务类 (EJB)
@Stateless
public class Service {
@PersistenceContext(unitName = "cwPU")
private EntityManager em;
public One createOne() {
return em.merge(new One());
}
public Many createMany(String name) {
return em.merge(new Many(name));
}
public One add(Long oneId, Long manyId) {
One one = em.find(One.class, oneId);
Many many = em.find(Many.class, manyId);
one.getMany().add(many);
return one;
}
public One find(Long id) {
One one = em.find(One.class, id);
return one;
}
}
主类
public class Main {
public static void main(String[] args) throws NamingException {
EJBContainer container = EJBContainer.createEJBContainer();
Context ctx = container.getContext();
Service service = (Service) ctx.lookup("java:global/classes/Service");
One one = service.createOne();
Many many = service.createMany("the-first");
service.add(one.getId(), many.getId());
many = service.createMany("a-second");
one = service.add(one.getId(), many.getId());
one = service.find(one.getId());
System.out.println("-------------------------------------------------");
for (Many m : one.getMany()) {
System.out.println(m.getName());
}
container.close();
}
}
输出:
the-first
a-second
无论我向@OrderBy 注解写什么(name ASC,name DESC,id ASC,id DESC),输出总是相同的 id 升序排列。
知道我错过了什么吗?
【问题讨论】:
标签: jpa eclipselink