我目前正面临一个问题,我想也许你们中的一些人可以帮助我。 我正在使用SPRING和HIBERNATE开发一个应用程序,我的问题如下:
1 - 我首先在主对象中创建一个新的AudioFile对象(Domain类),然后使用DAO中的hibernateTemplate.save(audioFile)方法将其插入数据库。
2 - 然后我使用DAO的hibernateTemplate.get(1)方法从数据库中检索行,并将实例存储到audioFile1对象中。 (AudioFile类型)
3 - 然后我重复第2步并将实例存储到audioFile2对象中。
总结:我的主要课程是这样的:
ApplicationContext context = new ClassPathXmlApplicationContext(
"application-context.xml");
AudioFileServices audioFileServices = (AudioFileServices) context.getBean("audioFileServices");
AudioFile audioFile = new AudioFile();
audioFile.setAlbum("test");
audioFile.setArtist("test");
audioFile.setLength(1);
audioFile.setPath("test");
audioFile.setTitle("test");
AudioFile a1 = null;
AudioFile a2 = null;
try {
audioFileServices.saveAudioFile(audioFile);
a1 = audioFileServices.getAudioFile(audioFile.getIdAudioFile());
a2 = audioFileServices.getAudioFile(audioFile.getIdAudioFile());
} catch (Exception e) {
e.printStackTrace();
}
ISSUE: audioFile1和audioFile2都表示同一个对象(数据库中的同一行),但它们是两个不同的实例,而不是两个引用同一实例的对象。 (正如我希望的那样)因此,对第一个对象所做的任何修改都不会影响第二个对象。 (即使它们都映射到同一个数据库行)
我已正确配置应用程序上下文以将AudioFileDAO bean注入AudioFileService bean并使用服务层架构。除了这个恼人的问题,一切都很完美。我还设置了事务,并使用了由SPRING注入AudioFileDAO bean的sessionFactory bean。
你们有没有人知道我在这里失踪了什么?也许这是一个HIBERNATE配置问题? 有什么想法吗?
提前谢谢你。 (如果需要,我可以提供我的应用程序上下文,服务和dao代码的副本)
答案 0 :(得分:0)
如何设置a2 = a1,而不是从方法getAudioFile获取。
答案 1 :(得分:0)
这可能是因为Hibernate没有缓存检索到的对象实例。我会调查Hibernate Configuration