Java 将类成员传递给方法

Java 将类成员传递给方法,java,jpa,querydsl,Java,Jpa,Querydsl,嗨,我想写一个通用的排序方法 public mySortMethod(Customer customer, Customer.member sortBy) { return query.from(customer).orderBy(customer.sortBy.asc()); } 所以我可以这样调用这个方法 mySortMethod(myCustomer,Customer.name) 是否有方法将类成员传递给方法(并验证参数“是否为”MyClass.members)类型) 我

嗨,我想写一个通用的排序方法

public mySortMethod(Customer customer, Customer.member sortBy) {
       return query.from(customer).orderBy(customer.sortBy.asc());
}
所以我可以这样调用这个方法

mySortMethod(myCustomer,Customer.name)
是否有方法将类成员传递给方法(并验证参数“是否为”
MyClass.members
)类型)

我正在使用Java和QueryDSL JPA
感谢您为什么不在实体类中使用@orderby注释

@OrderBy

动态排序可以通过@OrderBy注释完成。 “动态”表示在检索关联时对集合的元素进行排序

@Entity
public class Comment {
@Id @GeneratedValue
private Long id;
private String nickname;
private String content;
private Integer note;
@Column(name = "posted_date")
@Temporal(TemporalType.TIMESTAMP)
private Date postedDate;
// Constructors, getters, setters
}
清单3-54。新闻实体的评论按发布日期降序排列

@Entity
public class News {
@Id @GeneratedValue
private Long id;
@Column(nullable = false)
private String content;
@OneToMany(fetch = FetchType.EAGER)
@OrderBy("postedDate DESC")
private List<Comment> comments;
// Constructors, getters, setters
}
@实体
公共类新闻{
@Id@GeneratedValue
私人长id;
@列(nullable=false)
私有字符串内容;
@OneToMany(fetch=FetchType.EAGER)
@订购人(“后期描述”)
私人名单评论;
//构造函数、getter、setter
}
@OrderBy注释将必须进行排序的属性(postedDate属性)的名称以及方法(升序或降序)作为参数

字符串ASC r DESC可分别用于升序或降序排序

您可以在@OrderBy注释中使用多个列。如果您需要按发布日期和备注进行订购,可以使用OrderBy(“postedDate DESC,note ASC”)

@OrderBy注释对数据库映射没有任何影响。
检索集合时,持久性提供程序只需被告知使用order by子句。

您可以使用反射来执行此操作(不是很优雅):

@Entity
public class Comment {
@Id @GeneratedValue
private Long id;
private String nickname;
private String content;
private Integer note;
@Column(name = "posted_date")
@Temporal(TemporalType.TIMESTAMP)
private Date postedDate;
// Constructors, getters, setters
}
其中,我们假设您创建了一个
Customer
类,其中包含一个名为
customerLastName
的字段

请注意,这是一个通用方法,不限于Customer类。可以在中传递任何类的对象。比如说

mySortMethod(customerAddress, "city");

谢谢,我不太明白。用户实际发送的是他想要订购的内容和订购方向(ASC/DSC)。如何动态地完成?你能举个例子吗?
mySortMethod(customerAddress, "city");