【发布时间】:2018-10-11 16:30:34
【问题描述】:
我有一个 Contact 实体通过 @OneToMany 关系连接到一个 ContactList 实体。然后 ContactList 实体通过@ManyToOne 连接到 Review List 实体。 ContactList 实体具有与列表中的联系人相关的数据。我需要通过 Review List 中的 createdOn 时间戳对 Contact 中的 ContactList 子项进行排序。我不确定这是否可能。
联系实体
@OneToMany(mappedBy = "contact")
@OrderBy("created_on DESC") <-- This does not work.
private SortedSet<ContactList> contactLists;
ContactList 实体:
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "LIST_ID")
private ReviewList reviewList;
ContactList compareTo:
@Override
public int compareTo(ContactList b) {
if (this.getReviewList().getCreatedOn().getTime() == b.getReviewList().getCreatedOn().getTime()) {
log.error("Two review lists have the exact same created time???");
return 0;
}
return this.getReviewList().getCreatedOn().getTime() < b.getReviewList().getCreatedOn().getTime() ? -1 : 1;
}
Review List createdOn 字段我正在尝试按以下方式对父项进行排序:
@Column(name="CREATED_ON", updatable=false)
private Timestamp createdOn;
我在没有@OrderBy 符号的情况下尝试过它,它不会编译。但是我试图在报价中引用的所有内容都失败了。我已经尝试过如图所示的contactList、reviewList、reviewList.createdOn、reviewList_createdOn 以及其他一些非常愚蠢的东西。
Hibernate 似乎将引用字符串的第一部分直接放入查询中。无论我在其中输入什么错误:
原因:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:“订单子句”中的未知列“contactlis0_.created_on” 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_91] 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_91] 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_91] 在 java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[na:1.8.0_91] 在 com.mysql.jdbc.Util.handleNewInstance(Util.java:425) ~[mysql-connector-java-5.1.44.jar:5.1.44] 在 com.mysql.jdbc.Util.getInstance(Util.java:408) ~[mysql-connector-java-5.1.44.jar:5.1.44] 在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:943) ~[mysql-connector-java-5.1.44.jar:5.1.44]
当然可以,因为我试图引用另一个表中的字段。它需要在两者之间做某种 JoinColumn。
有没有办法做到这一点?我可能会编写一个自定义 JPQL 查询来按照我的意愿对它们进行排序并将其分别传递给页面,但我试图通过注释和休眠来做到这一点。
【问题讨论】:
标签: spring hibernate sorting spring-data-jpa parent-child