@OrderBy在JPA中无法正常工作

@OrderBy如何运作?

它在以下代码中不起作用:

Employee.java

 package com.semanticbits.pojo; import java.util.List; import javax.persistence.CascadeType; import javax.persistence.Embedded; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.OneToMany; import javax.persistence.OrderBy; @Entity public class Employee { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private int employeeId; private String name; private double salary; @OneToMany(cascade=CascadeType.ALL) @JoinColumn(name="EMP_ID") @OrderBy("city DESC") private List
address; //setters and getters public int getEmployeeId() { return employeeId; } public void setEmployeeId(int employeeId) { this.employeeId = employeeId; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getSalary() { return salary; } public void setSalary(double salary) { this.salary = salary; } public List
getAddress() { return address; } public void setAddress(List
address) { this.address = address; } }

Address.java

 package com.semanticbits.pojo; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @Entity public class Address { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private int addressId; private String street; private String city; private String state; private int zipCode; public String getStreet() { return street; } public void setStreet(String street) { this.street = street; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getState() { return state; } public void setState(String state) { this.state = state; } public int getZipCode() { return zipCode; } public void setZipCode(int zipCode) { this.zipCode = zipCode; } } 

persistence.xml中

      com.semanticbits.pojo.Employee com.semanticbits.pojo.Address           

这是测试类……检查城市名称,它不是按照ADDRESS表中的降序顺序存储地址值

JPAOrderByAnnotationTest

  package com.semanticbits.test; import java.util.ArrayList; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import com.semanticbits.pojo.Address; import com.semanticbits.pojo.Employee; public class JPAOrderByAnnotationTest { /** * @param args */ public static void main(String[] args) { EntityManagerFactory factory=Persistence.createEntityManagerFactory("orderbyannotationdemo"); EntityManager manager=factory.createEntityManager(); Employee employee=new Employee(); employee.setName("Shoaib"); employee.setSalary(1452365); Address addressOffice=new Address(); addressOffice.setCity("Hyderabad"); addressOffice.setStreet("Gachibowli"); addressOffice.setState("AP"); addressOffice.setZipCode(500016); Address addressHome=new Address(); addressHome.setCity("Noida"); addressHome.setStreet("Chandai Chowk"); addressHome.setState("UP"); addressHome.setZipCode(415608); Address addressCollege=new Address(); addressCollege.setCity("Antartica"); addressCollege.setState("Canada"); addressCollege.setStreet("New York"); addressCollege.setZipCode(402103); List
addresses=new ArrayList
(); addresses.add(addressHome); addresses.add(addressOffice); addresses.add(addressCollege); employee.setAddress(addresses); manager.getTransaction().begin(); manager.persist(employee); manager.getTransaction().commit(); manager.close(); } }

我认为你误解了@Orderby注释实际上做了什么。 根据javadoc :

指定在检索关联或集合时的集合值关联或元素集合的元素的顺序。

[强调添加]注释没有规定插入顺序。 继续您的示例,如果您要获取Employee

 Employee employee = manager.find(Employee.class, employeeId); List
addresses = employee.getAddress();

然后addresses将按city降序排序。

根据你必须使用的规范:

 @OrderBy("address.city DESC")