Java 无法在hibernate中实现between语句

Java 无法在hibernate中实现between语句,java,hibernate,hsqldb,Java,Hibernate,Hsqldb,嗨,我正在用Hibernate和HSQL实现一个简单的应用程序。冬眠却表现得很奇怪!我想查询两个值之间的一些实体,但是只返回一个实体,而不是整个列表 这是我的方法 @Override public List<ClientConnectionEntity> getConnectionBetween(long start, long end) { Session session = sessionFactory.openSession(); Qu

嗨,我正在用Hibernate和HSQL实现一个简单的应用程序。冬眠却表现得很奇怪!我想查询两个值之间的一些实体,但是只返回一个实体,而不是整个列表

这是我的方法

 @Override
    public List<ClientConnectionEntity> getConnectionBetween(long start, long end) {
        Session session = sessionFactory.openSession();
        Query query = session.createQuery("FROM com.cayetano.persistense.entities.ClientConnectionEntity c" +
                " WHERE c.connectionTime between :start and :end ")
                .setParameter("start", start)
                .setParameter("end", end);
        List<ClientConnectionEntity> list = query.list();
        session.close();
        return list;
    } 




@Override
    public void saveConnection(ClientConnectionEntity entity) {


        Session session = sessionFactory.openSession();


        Transaction transaction = session.beginTransaction();


        session.persist(entity);


        transaction.commit();

        session.close();
    }



@Test
    public void returnsClientConnectionsBetweenTwoDates() {

        ClientConnectionEntity entity1 = new ClientConnectionEntity();
        entity1.setConnectionTime(1l);
        entity1.setClientBrowser("1");

        ClientConnectionEntity entity2 = new ClientConnectionEntity();
        entity1.setConnectionTime(2l);
        entity1.setClientBrowser("2");

        ClientConnectionEntity entity3 = new ClientConnectionEntity();
        entity1.setConnectionTime(2l);
        entity1.setClientBrowser("2");


        ClientConnectionEntity entity4 = new ClientConnectionEntity();
        entity1.setConnectionTime(4l);
        entity1.setClientBrowser("4");


        repository.saveConnection(entity1);
        repository.saveConnection(entity2);
        repository.saveConnection(entity3);
        repository.saveConnection(entity4);

        assertThat(repository.getConnections().size(),is(4)); // this one is Ok 

        List<ClientConnectionEntity> expected =  repository.getConnectionBetween(2l, 4l);

        assertThat(expected.size(), is(2));

    }
@覆盖
公共列表getConnectionBetween(长起点、长终点){
Session Session=sessionFactory.openSession();
Query Query=session.createQuery(“来自com.cayetano.persistense.entities.ClientConnectionEntity c”+
“其中c.connectionTime介于:开始和:结束之间”)
.setParameter(“开始”,开始)
.setParameter(“结束”,结束);
List=query.List();
session.close();
退货清单;
} 
@凌驾
public void saveConnection(ClientConnectionEntity实体){
Session Session=sessionFactory.openSession();
事务=会话。beginTransaction();
会议(实体);
commit();
session.close();
}
@试验
public void返回两个日期之间的客户端连接(){
ClientConnectionEntity1=新的ClientConnectionEntity();
entity1.setConnectionTime(1l);
entity1.setClientBrowser(“1”);
ClientConnectionEntity2=新的ClientConnectionEntity();
entity1.setConnectionTime(2l);
entity1.setClientBrowser(“2”);
ClientConnectionEntity3=新的ClientConnectionEntity();
entity1.setConnectionTime(2l);
entity1.setClientBrowser(“2”);
ClientConnectionEntity4=新的ClientConnectionEntity();
entity1.setConnectionTime(4l);
entity1.setClientBrowser(“4”);
repository.saveConnection(entity1);
repository.saveConnection(entity2);
repository.saveConnection(entity3);
repository.saveConnection(entity4);
assertThat(repository.getConnections().size(),is(4));//这个没问题
List expected=repository.getConnectionBetween(2l,4l);
断言(预期的.size()为(2));
}
测试失败了

java.lang.AssertionError: 
Expected: is <2>
     but: was <1>
    at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20)
    at org.junit.Assert.assertThat(Assert.java:865)
    at org.junit.Assert.assertThat(Assert.java:832)
java.lang.AssertionError:
预期:是吗
但是:是吗
位于org.hamcrest.matcherasert.assertThat(matcherasert.java:20)
位于org.junit.Assert.assertThat(Assert.java:865)
位于org.junit.Assert.assertThat(Assert.java:832)

您进行了复制/粘贴,但忘记更改变量名称

您还有一些更严重的问题。在
finally
中不关闭
会话
是一个很大的禁忌,因为异常会导致资源泄漏。此外,在查询后关闭会话可能会在稍后尝试访问被查询实体的属性时导致
LazyInitializationException
。您是对的,谢谢:)啊,旧副本。好的,那又怎样?复制粘贴不是问题所在。。。我看不出应该有4个实体具有长值1l、2l、2l、4l中的时间,当这样查询时,我应该得到2个实体。repository.getConnectionBetween(2l,4l)@Adio您所有的
setConnectionTime
setClientBrowser
都是在entity1OMG上设置的,我花了大约一个小时在这个上面:(非常感谢!
    ClientConnectionEntity entity1 = new ClientConnectionEntity();
    entity1.setConnectionTime(1l);
    entity1.setClientBrowser("1");

    ClientConnectionEntity entity2 = new ClientConnectionEntity();
    entity1.setConnectionTime(2l);
    entity1.setClientBrowser("2");

    ClientConnectionEntity entity3 = new ClientConnectionEntity();
    entity1.setConnectionTime(2l);
    entity1.setClientBrowser("2");


    ClientConnectionEntity entity4 = new ClientConnectionEntity();
    entity1.setConnectionTime(4l);
    entity1.setClientBrowser("4");