当前位置: 首页 > 面试题库 >

@OrderBy在JPA中无法正常工作

艾成益
2023-03-14
问题内容

@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> 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<Address> getAddress() {
    return address;
}

public void setAddress(List<Address> address) {
    this.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

   <?xml version="1.0" encoding="UTF-8"?>
     <persistence xmlns="http://java.sun.com/xml/ns/persistence"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
     http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">

    <persistence-unit name="orderbyannotationdemo" transaction-type="RESOURCE_LOCAL">
  <provider></provider>

        <class>com.semanticbits.pojo.Employee</class>
        <class>com.semanticbits.pojo.Address</class>

        <properties>

            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/shoaib"/>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
            <property name="javax.persistence.jdbc.user" value="root"/>
            <property name="javax.persistence.jdbc.password" value="root"/>
            <property name="eclipselink.logging.level" value="FINE"/>
            <property name="eclipselink.ddl-generation" value="create-tables"/>

        </properties>
    </persistence-unit>
    </persistence>

这是测试类……请检查城市名称,它没有在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<Address> addresses=new ArrayList<Address>();
    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<Address> addresses = employee.getAddress();

然后addresses将按city降序排序。



 类似资料:
  • 问题内容: 尽管我很确定这是昨天或前一天工作的,例如,在IE10中不再起作用。我已经测试了我的浏览器,但是它不再起作用了。还有谁有相同的问题吗?或者,它永远都行不通吗? 问题答案: IE不支持输入type =“ number”,但您可以使用jQueryUISpinner小部件。它非常易于使用,并且具有许多对开发人员友好的API。

  • 我这里有点麻烦。我试图在我的MVC4项目中使用TinyMCE作为文本编辑器。 到目前为止,这很简单,我只需要能够正确地显示编辑器。 我有两个重要的类。 控制员: 然后是视图,这就是我试图让TinyMCE工作的地方: @{ViewBag.Title=“Index”;} 亲善 这是一些可以用TinyMCE编辑的内容。 出于某种原因,结果是这样的:它看起来如何 知道为什么我没有从TinyMCE获得任何功

  • 问题内容: 因此,我的设置无法按我想要的方式工作。因此,每当我运行该程序时,它就会立即从0变为100。我尝试使用,任务,并尝试了,但没有任何尝试。 这是我的程序: @MadProgrammer这是我尝试做一名摆动工作人员并将每个名称写入文档并更新进度栏的尝试。该程序将达到86%左右并停止运行,永远不会创建完成的文档。该程序将创建一个空白文档。这是我首先创建的SwingWorker对象,这是两种方法

  • 问题内容: 我在JLayeredpane上有两个JPanels。其中一个显示pdf,重叠的一个具有透明背景(我使用过setOpaque(false))。现在,我可以将图形添加到透明面板中,这样看来我实际上是在注释pdf。我想要一个橡皮擦工具来删除这些注释。我尝试使用以下代码 其中path是由多条线构成的形状。现在,不是在先前的图形上绘制 透明线 ,而是绘制 黑线 。我要去哪里错了? 问题答案: 请

  • 问题内容: 这看起来有效,但无法正常工作。我希望菜单悬停时’huh’div不透明。我尝试了淡入/淡出效果,但效果很好,但只有一次很奇怪。 问题答案: 不带点使用:

  • 问题内容: 我正在编辑从tesseract ocr获得的一些电子邮件。 这是我的代码: 但是输出不正确。 输入: 输出: 但是,当我在每次替换后将结果分配给新的String时,它都能正常工作。为什么在同一字符串中连续分配不起作用? 问题答案: 您将在Javadoc中的String.replaceAll()中注意到,第一个参数是正则表达式。 句点()和管道()以及花括号()都有特殊的含义。您需要对它