У меня сейчас проблема, и я подумал, что некоторые из вас, ребята, могут мне помочь. Я занимаюсь разработкой приложений с помощью пружинного и Hibernate, и мой вопрос заключается в следующем:Spring, Hibernate и несколько ссылок на одну и ту же строку в базе данных
- Я сначала создать новый объект аудиофайла (класс домена) в моем главном объекте, а затем вставьте его в базе данных с помощью hibernateTemplate .save (audioFile) в DAO.
- Затем я использую метод DAB для hibernateTemplate.get (1) для извлечения строки из базы данных и сохранения экземпляра в объект audioFile1. (Типа аудиофайл)
- то я повторить шаг 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();
}
ВОПРОС: Оба audioFile1 и audioFile2 представляют один и тот же объект, (в той же строке в базе данных), однако, они являются два разные экземпляры, а не два объекта, ссылающиеся на один и тот же экземпляр. (Как мне бы хотелось) Поэтому любая модификация, сделанная для первого объекта, не влияет на вторую. (Несмотря на то, что оба они сопоставлены с одной и той же строкой базы данных)
Я правильно настроил контекст приложения для вставки компонента AudioFileDAO в компонент AudioFileService и использую архитектуру уровня сервиса. Все работает отлично, за исключением этой досадной проблемы. Я также создал транзакции, и я использую компонент sessionFactory, который также добавляется в компонент AudioFileDAO по версии SPRING.
Вы знаете, что мне не хватает здесь? Может быть, это проблема конфигурации HIBERNATE? Любые идеи?
Заранее спасибо. (Я могу предоставить копию моего контекста приложения, сервиса и дао, если необходимо)
Привет, Гари, Спасибо за ваш ответ. Моя проблема заключается в том, что в этом примере я использую только основной класс, чтобы разоблачить мою проблему, но на самом деле я разрабатываю приложение Swing с несколькими представлениями и контроллером. Затем конкретный звуковой файл может быть извлечен из разных представлений, которые не имеют ссылок друг на друга, и поэтому я не могу использовать set a2 = a1, хотя он является первопричиной всех экземпляров, ссылающихся на эту же строку в ссылке базы данных на тот же экземпляр. – user1373769