Java Hibernate查询在使用ORDERBY子句时卡住
我有以下HQL查询:Java Hibernate查询在使用ORDERBY子句时卡住,java,hibernate,freeze,clause,Java,Hibernate,Freeze,Clause,我有以下HQL查询: SELECT bu FROM Backup bu WHERE bu.status = :status ORDER BY bu.container.techId ASC 每当查询结果>0时,查询就会停止,这意味着query.getResultList()永远不会返回。 但是,如果我删除ORDERBY子句,只需从Backup bu中选择bu,其中bu.status=:status运行正常 我的课程是: public class Backup implements Serial
SELECT bu FROM Backup bu WHERE bu.status = :status ORDER BY bu.container.techId ASC
每当查询结果>0时,查询就会停止,这意味着query.getResultList()永远不会返回。
但是,如果我删除ORDERBY子句,只需从Backup bu中选择bu,其中bu.status=:status运行正常
我的课程是:
public class Backup implements Serializable {
@Id
@Column(name="ID")
@GenericGenerator(name = "generator", strategy = "guid", parameters = {})
@GeneratedValue(generator = "generator")
private String id;
@Column(name="PVAID", nullable=true)
private String PVAID;
@Column(name="Error", nullable=true)
private String error;
@Column(name="\"Size\"", nullable=false)
private Long backupSize;
@Temporal(TemporalType.TIMESTAMP)
@Column(name="startdate", nullable=false)
private Date startDate;
@Temporal(TemporalType.TIMESTAMP)
@Column(name="enddate", nullable=true)
private Date endDate;
@Column(name="status", nullable=false)
private Short status;
@ManyToOne
@JoinColumn(name="fullbackupid", referencedColumnName="ID", nullable=true)
private Backup fullBackup;
@ManyToOne
@JoinColumn(name = "ContainerID", referencedColumnName="ID", nullable=false)
private Container container;
}
及
执行查询的代码
public List<T> getAllByFilter(final boolean isNamedQuery, final String queryString, final HashMap<String, Object> fields, final int startRecord, final int maxResults) {
logger.log(Level.INFO, "Loading all paginated");
final EntityManager em = emf.createEntityManager();
Query query = null;
if(isNamedQuery) {
query = em.createNamedQuery(queryString);
} else {
query = em.createQuery(queryString);
}
final Set<?> set = fields.entrySet();
final Iterator<?> i = set.iterator();
while(i.hasNext()){
final Map.Entry me = (Map.Entry)i.next();
final String field = (String)me.getKey();
final Object value = me.getValue();
System.out.println(me.getKey() + " : " + me.getValue() );
query.setParameter(field, value);
}
query.setFirstResult(startRecord);
if (maxResults!=0) query.setMaxResults(maxResults);
return query.getResultList();
}
参考底图数据库是SQL Server
问题出在哪里?有人面临类似的问题吗?
谢谢能否显示检索查询值的java代码?Containers表中有多少条记录?通过在hibernate中删除order By,您就删除了容器的连接-如果Containers表有许多记录,那么执行该操作可能需要很长时间join@Alex我假设您将FetchType更改为
Lazy
,用于manytone
持久化中的某个映射?默认情况下,对于Hibernate,它是Eager
。但是,如果将其更改为“惰性”,则按短语顺序映射可能无效。@子规则否,FETCHTYPE中没有更改您是否在数据库中运行了hibernate手动生成的SQL?
public List<T> getAllByFilter(final boolean isNamedQuery, final String queryString, final HashMap<String, Object> fields, final int startRecord, final int maxResults) {
logger.log(Level.INFO, "Loading all paginated");
final EntityManager em = emf.createEntityManager();
Query query = null;
if(isNamedQuery) {
query = em.createNamedQuery(queryString);
} else {
query = em.createQuery(queryString);
}
final Set<?> set = fields.entrySet();
final Iterator<?> i = set.iterator();
while(i.hasNext()){
final Map.Entry me = (Map.Entry)i.next();
final String field = (String)me.getKey();
final Object value = me.getValue();
System.out.println(me.getKey() + " : " + me.getValue() );
query.setParameter(field, value);
}
query.setFirstResult(startRecord);
if (maxResults!=0) query.setMaxResults(maxResults);
return query.getResultList();
}
13:45:03,583 INFO [STDOUT] Hibernate: select top 41 backup0_.ID as ID153_, backup0_.IsFullBackup as IsFullBa2_153_, backup0_.PVAID as PVAID153_, backup0_.Error as Error153_, backup0_.[Size] as Size5_153_, backup0_.startdate as startdate153_, backup0_.enddate as enddate153_, backup0_.status as status153_, backup0_.ManualBackup as ManualBa9_153_, backup0_.fullbackupid as fullbac10_153_, backup0_.ContainerID as Contain11_153_ from Backups backup0_, Containers container1_ where backup0_.ContainerID=container1_.ID and backup0_.status=? order by container1_.TechID DESC