Hibernate Многія-да-шматлікім, дублюе тую ж запіс

Я паспрабаваў супастаўлення бібліятэкі Hibernate Шмат-да-шматлікім з дапамогай анатацый з прыкладам, прыведзеных у vaannila.

Http://WWW .vaannila.com/спячы рэжым/спячы рэжым, напрыклад,/спячы рэжым-адлюстраванне-многія-да-шматлікім-дапамога-анатацый-1.html

        Set courses = new HashSet();
        courses.add(new Course("Maths"));
        courses.add(new Course("Computer Science"));

        Student student1 = new Student("Eswar", courses);
        Student student2 = new Student("Joe", courses);
        session.save(student1);
        session.save(student2);

Гэтая рэч працуе выдатна. Але калі я спрабую дадаць яшчэ адзін курс пазней, да існага студэнту, як,

        Set courses = new HashSet();
        courses.add(new Course("Science"));
        Student student = new Student("Eswar", courses);
        session.save(student);

Ён дублюе студэнт Эсвара зноў у табліцы.

        +------------+--------------+
        | STUDENT_ID | STUDENT_NAME |
        +------------+--------------+
        |          1 | Eswar        |
        |          2 | Joe          |
        |          3 | Eswar        |
        +------------+--------------+

Не магу я дадаць курсы да існуючага Эсвару? Я вельмі цаню вашу дапамогу для гэтай праблемы.

1

1 адказы

Спачатку трэба атрымаць студэнт з базы дадзеных, а затым дадаць курсы да гэтага аб'екта, а затым захаваць згруджана аб'ект.

Такім чынам, Вы ствараеце новы аб'ект Student, гэты новы аб'ект студэнта мае нуль у «ВД» пераменны асобнік. Мне здаецца, што Hibernate павінен быць адлюстраванне гэтага пераменнага асобніка для першаснага ключа для погляду ўверх, калі ідэнтыфікатар знойдзены, запіс абнаўляецца яшчэ новы запіс ўстаўляецца ..

і так, калі і трэба дадаць курс для існуючага студэнта, U можа атрымаць першы набор з вынятага аб'екта студэнта, а затым дадаць курс у гэтым наборы, а затым захаваць ...... яшчэ новы хэш-набор будзе ўтрымліваць толькі новы курс, і папярэдняя запіс будзе перапісаная.

0
дададзена
Ваш адказ у парадку, за выключэннем прапаноў, пачынаючы з «Мне здаецца». Session.save заўсёды спрабуе ўставіць. Ён не абнаўляе існуючы аб'ект.
дададзена аўтар JB Nizet, крыніца
@JBNizet ОКЗ, я паглядзеў яго зноў, на самай справе ў маім выпадку аб'ект быў або захаваны або абноўлены, на падставе наяўнасці першаснага ключа ў аб'екце .... Я праверыў яго зноў і выявіў, што мы выкарыстоўвалі Session.saveOrUpdate (асобнік ) спосаб ..... дзякуй за выпраўленне .....
дададзена аўтар Zohaib, крыніца
Zohaib і JB Nizet, Вялікі дзякуй за вялікую падтрымку! Цяпер ён працуе нармальна з saveOrUpdate (). Яшчэ раз дзякуй за абодва вашай дапамогі! :)
дададзена аўтар Tharaka Deshan, крыніца