小编San*_*cko的帖子

HQL查询将使用Hibernate二级缓存吗

我想澄清一些有关休眠的二级缓存的要点。需要澄清的一点是,HQL查询是否总是会命中数据库(至少是为了获取ID)。

考虑我们有实体

class Customer {

    long id;  // Primary key

    String name;

    set <Address> addressList;   // One to many relationship

}

class Address{

    long id; // Primary key

    String houseName;

}
Run Code Online (Sandbox Code Playgroud)

地址的数据库表具有对客户(id)的外键引用,以支持一对多关系。

前提是,我已将2级缓存启用为EHcache休眠。仅实体和关联设置为可缓存。没有启用查询缓存。

我知道,如果我多次使用session.get()或session.load(),则只有第一个调用才会向数据库发出查询,而随后的调用将从2级缓存中获取数据。

我的问题是

1)HQL是否会利用二级缓存。在一个会话中,我执行了一个HQL以使用主键(id)获取对象,“从Customer c,其中c.id =?”)。setParameter(1,1005)。

如果我在不同的会话中运行了相同的HQL,则将从2级缓存中获取Customer对象,否则它将再次访问数据库。

2)考虑执行另一个HQL,from Customer as c left join fetch c.addressList以选择客户和关联的地址。

如果我在不同的会话中运行了相同的HQL,则将从第二级缓存中获取关联的地址,否则它将再次命中数据库。

java hibernate jpa hql second-level-cache

3
推荐指数
1
解决办法
2751
查看次数

LINUX中库/可执行文件的大小很高

我们有一个使用C++创建的32位Gui应用程序.我们将应用程序从Solaris移植到Linux.我们面临的问题是

与Solaris相比,LINUX中的库和可执行文件的大小非常大.

Red Hat Enterprise Linux 5.4是我们使用的Linux版本.

请查找创建的示例动态库.我们想知道LINUX的以下行为是否正常.

考虑我们创建了两个文件test1.cc和test2.cc.两者都有一行代码.

a-2720@N530 /data1/users/a-2720/samp :ls  -lrt test1.cc test2.cc

-rw-rw-r--   1 a-2720   mcs           21 May 18 06:16 test1.cc

-rw-rw-r--   1 a-2720   mcs           21 May 18 06:16 test2.cc


a-2720@N530 /data1/users/a-2720/samp :cat test1.cc

    #include<iostream.h>


a-2720@N530 /data1/users/a-2720/samp :cat test2.cc

    #include<iostream.h>
Run Code Online (Sandbox Code Playgroud)

因此文件中只有一行

我使用这些文件创建了一个共享库.

SOLARIS

CC -c  -library=iostream  -g -mt test1.cc

CC -c  -library=iostream  -g -mt test2.cc

CC -G -h libtestsolaris.so test1.o test2.o -o libtestsolaris.so -library=iostream 

a-2720@N530 /data1/users/a-2720/samp :ls  -lrt test1.o test2.o libtestsolaris.so

-rw-rw-r--   1 a-2720   mcs        20944 May …
Run Code Online (Sandbox Code Playgroud)

c c++ linux

0
推荐指数
1
解决办法
665
查看次数

标签 统计

c ×1

c++ ×1

hibernate ×1

hql ×1

java ×1

jpa ×1

linux ×1

second-level-cache ×1