我想澄清一些有关休眠的二级缓存的要点。需要澄清的一点是,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,则将从第二级缓存中获取关联的地址,否则它将再次命中数据库。
我们有一个使用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)
因此文件中只有一行
我使用这些文件创建了一个共享库.
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)