Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Hibernate时的性能问题_Java_Mysql_Performance_Hibernate - Fatal编程技术网

Java 使用Hibernate时的性能问题

Java 使用Hibernate时的性能问题,java,mysql,performance,hibernate,Java,Mysql,Performance,Hibernate,我有一个查询,需要使用不同的参数连续运行大约200次。查询(与Hibernate生成的查询相同)本身非常快(小于1ms),但每个查询的Hibernate开销为2-3ms,大约为500ms 我使用条件或命名查询获得相同的结果,即使我简化了查询并删除了所有参数。当使用简单的Session.get(Class,Id)时,获取同一个实体所需的时间不到1ms,因此我知道Hibernate能够足够快地从数据库中获取和创建对象 数据库中只有一行,这需要3毫秒: Criteria criteria = sess

我有一个查询,需要使用不同的参数连续运行大约200次。查询(与Hibernate生成的查询相同)本身非常快(小于1ms),但每个查询的Hibernate开销为2-3ms,大约为500ms

我使用条件或命名查询获得相同的结果,即使我简化了查询并删除了所有参数。当使用简单的Session.get(Class,Id)时,获取同一个实体所需的时间不到1ms,因此我知道Hibernate能够足够快地从数据库中获取和创建对象

数据库中只有一行,这需要3毫秒:

Criteria criteria = sessionFactory.getCurrentSession().createCriteria(TestEntity.class)
criteria.list();
虽然这需要0毫秒:

sessionFactory.getCurrentSession().get(TestEntity.class, 1);
产生这种开销的原因是什么?有什么办法可以解决吗

运行于:Hibernate 4.3.4.Final、Spring 4.0.2.RELEASE和MySQL 5.5.35

编辑: 这是我正在测试的实体:

@Entity
@Table(name = "TEST")
public class TestEntity implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue
@Column(name = "ID", updatable = false, insertable = false)
public long id;

@Column(name = "VALUE")
public BigDecimal value;

public TestEntity() {
    super();
}

}

你能发布更多的数据吗?是否使用映射/注释联接?您的id是复合id吗?按id获取实体使用一级缓存。所以,若实体已经在缓存中,那个么它的速度非常快。但即使是第一个get-by-id也非常快。我还尝试启用/禁用二级缓存,以了解这对性能的影响,但这并不是什么大的改变。