使用DISTINCT对SQL查询执行计划的查询成本有很大影响吗?
在一个包含100,000行的表中,两者之间会有什么不同:
select * from TABLE
Run Code Online (Sandbox Code Playgroud)
和
select distinct(*) from TABLE
Run Code Online (Sandbox Code Playgroud)
以毫秒计?
正如标题所说,我想知道这两种方法之间的区别。
具体来说,我想知道以下之间的区别:
join(String arg) AND joinSet(String arg)
因为即使属性是一个集合,我也可以使用join(String arg),但不是相反,即在不是集合的属性上使用joinSet(String arg)。
谢谢。
我正在使用 JPA 元模型生成 http://relation.to/Bloggers/HibernateStaticMetamodelGeneratorAnnotationProcessor 能够使用属性名称执行条件查询。
我正在通过 ANT 和 hibernate-jpamodelgen-4.3.5.Final http://mvnrepository.com/artifact/org.hibernate/hibernate-jpamodelgen/4.3.5.Final生成元模型类
问题是:如果我有这样的实体:
@Entity public class Order
{
@Id
Integer id;
@ManyToOne
Customer customer;
@OneToMany
Set<Item> items;
BigDecimal totalCost;
java.net.URI uri;
...
}
Run Code Online (Sandbox Code Playgroud)
与二传手和一切......
生成的元模型将是这样的:
@StaticMetamodel(Order.class)
public class Order_ {
public static volatile SingularAttribute<Order, Integer> id;
public static volatile SingularAttribute<Order, Customer> customer;
public static volatile SetAttribute<Order, Item> items;
public static volatile SingularAttribute<Order, BigDecimal> totalCost;
}
Run Code Online (Sandbox Code Playgroud)
因此生成的类中缺少URI。
也许是因为缺少 java.net.URI 的标准无属性构造函数?
谢谢!
我想在javax.persistence.TypedQuery上设置超时.
我发现这个简单的方法:
TypedQuery<Foo> query = ... ;
query.setHint("javax.persistence.query.timeout", 1000);
query.getReturnList();
Run Code Online (Sandbox Code Playgroud)
但它似乎不起作用,它只是被忽略了.
从PRO JPA 2书中:
"不幸的是,设置查询超时不是可移植行为.它可能不受所有数据库平台支持,也不是所有持久性提供程序都支持的要求.因此,必须为三种情况准备要启用查询超时的应用程序.
首先是该属性被默默地忽略并且没有效果.
第二个是启用该属性,并且中止任何超过指定超时值的选择,更新或删除操作,并抛出QueryTimeoutException.可以处理此异常,并且不会导致任何活动事务被标记为回滚.
第三种情况是该属性已启用,但在执行此操作时,数据库会在超出超时时强制执行事务回滚.在这种情况下,将抛出PersistenceException并将事务标记为回滚.通常,如果启用,则应编写应用程序以处理QueryTimeoutException,但如果超出超时并且不抛出异常,则不应该失败."
有没有人知道在TypedQuery上指定超时的任何其他方法?
或者我怎样才能使这个"提示"起作用?
谢谢
编辑:Oracle 11.2.0.4.0和PostgreSql 9.2.9与JPA 2.1/Hibernate