给定2张桌子
@Entity
@Table
public class SomeEntity {
@Id
private Long someId;
@Column
private String text;
@ManyToMany
@JoinTable(name = "map", joinColumns = @JoinColumn(name = "someId"), inverseJoinColumns = @JoinColumn(name = "eventId"))
private Set<SomeEntityEvent> events;
// get/set
}
和
@Entity
@Table
public class SomeEntityEvent {
@Id
private Long eventId;
@Column
private Calendar date;
// get/set
}
Hibernate 将生成以下表格(注意我没有 Map 的实体)
some_entity: someId | text some_entity_event: eventId | date map: someId | eventId
我想使用Criteria
API 来获取SomeEntityEvent
属于某个SomeEntity
按日期排序并在某个范围内的所有实例。使用 SQL,我可以简单地做
SELECT *
FROM some_entity_event e
NATURAL JOIN map
WHERE map.someId = [ my field ]
ORDER BY e.date DESC
LIMIT 0, 100;
由于我没有Map
实体(或对 的引用SomeEntity
),因此我不知道如何构建Criteria
与上述查询等效的实体。下面的标准让我明白了SomeEntityEvent
。我只想要属于某些的那些SomeEntity
。
Criteria criteria = getCurrentSession().createCriteria(SomeEntityEvent.class);
criteria.addOrder(Order.desc("date"))
.setFirstResult(firstResult)
.setMaxResults(maxResults);
return criteria.list();
这可能Criteria
吗?如果是,您如何执行该连接?