@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")
- 为什么HttpServletRequest输入流为空?
- 如何使用-XX:+ UnlockDiagnosticVMOptions -XX:CompileCommand =使用JVM HotSpot打印选项
- 存储过程可以返回结果集吗?
- 使用Quartz的动态作业数据
- Apache Kafka:无法更新Metadata / java.nio.channels.ClosedChannelException
- 在Java中使用long转换为byte
- JavaFX – 许多静态FXML控制器
- 如何使用Jackson JSONvalidationJSON
- Eclipse插件开发 – Gradle无法从Eclipse启动器运行:java.io.IOException:拒绝访问