Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @OrderBy在JPA中工作不正常_Java_Jpa_Annotations - Fatal编程技术网

Java @OrderBy在JPA中工作不正常

Java @OrderBy在JPA中工作不正常,java,jpa,annotations,Java,Jpa,Annotations,@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; impor

@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;
}

  }
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>

com.semanticbits.pojo.Employee
com.semanticbits.pojo.Address
这是测试类……检查城市名称,它没有在地址表中按降序存储地址值

jpaorderbynotationtest

 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();




}
 }
package com.semanticbits.test;
导入java.util.ArrayList;
导入java.util.List;
导入javax.persistence.EntityManager;
导入javax.persistence.EntityManagerFactory;
导入javax.persistence.persistence;
导入com.semanticbits.pojo.Address;
导入com.semanticbits.pojo.Employee;
公共类JPAOrderByNotationTest{
/**
*@param args
*/
公共静态void main(字符串[]args){
EntityManagerFactory=Persistence.createEntityManagerFactory(“orderbyannotationdemo”);
EntityManager=factory.createEntityManager();
员工=新员工();
雇员名称(“Shoaib”);
雇员薪酬(1452365);
地址办公室=新地址();
地址:setCity(“海得拉巴”);
地址:setStreet(“Gachibowli”);
地址:setState(“AP”);
地址:setZipCode(500016);
addressHome=新地址();
地址:setCity(“Noida”);
地址home.setStreet(“Chandai Chowk”);
addressHome.setState(“UP”);
地址home.setZipCode(415608);
地址学院=新地址();
地址:setCity学院(“Antartica”);
地址:setState(“加拿大”);
地址:setStreet(“纽约”);
地址:College.setZipCode(402103);
列表地址=新的ArrayList();
地址。添加(addressHome);
地址。添加(地址办公室);
地址。添加(地址学院);
employee.setAddress(地址);
manager.getTransaction().begin();
经理(员工);
manager.getTransaction().commit();
manager.close();
}
}

根据您必须使用的规范:

@OrderBy("address.city DESC") 

我认为您误解了Orderby注释的实际功能。根据报告:

指定值为的集合元素的顺序 关联或元素集合在关联或 已检索到集合

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

Employee employee = manager.find(Employee.class, employeeId);
List<Address> addresses = employee.getAddress(); 
Employee=manager.find(Employee.class,employeeId);
列表地址=employee.getAddress();

然后,
地址
将按
城市
降序排序。

您不应该将注释放在getter而不是字段中吗?这是不正确的…请再次检查注释。特别是示例#3.点(“.”)符号用于表示嵌入属性中的属性。与点表示法一起使用的每个标识符的值是相应嵌入字段或属性的名称。