Spring,Hibernate和对数据库中同一行的多个引用

时间:2012-05-03 22:51:19

标签: spring hibernate orm reference instance

我目前正面临一个问题,我想也许你们中的一些人可以帮助我。 我正在使用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代码的副本)

2 个答案:

答案 0 :(得分:0)

如何设置a2 = a1,而不是从方法getAudioFile获取。

答案 1 :(得分:0)

这可能是因为Hibernate没有缓存检索到的对象实例。我会调查Hibernate Configuration