当前位置: 首页 > 面试题库 >

Hibernate多对多,重复相同的记录

胡曾笑
2023-03-14
问题内容

我尝试了使用“注释”对Hibernate进行“多对多映射”以及vaannila中给出的示例。

http://www.vaannila.com/hibernate/hibernate-example/hibernate-mapping-many-
to-many-using-annotations-1.html

        Set<Course> courses = new HashSet<Course>();
        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<Course> courses = new HashSet<Course>();
        courses.add(new Course("Science"));
        Student student = new Student("Eswar", courses);
        session.save(student);

它在表中再次复制了学生Eswar。

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

我不能将课程添加到现有的Eswar中吗?非常感谢您对这个问题的帮助。


问题答案:

您首先需要从数据库中获取Student,然后将课程添加到该对象,然后保存获取的对象。

这样,您正在创建一个新的Student对象,该新的Student对象在“
ID”实例变量中具有null。在我看来,Hibernate必须将此实例变量映射到主键以进行查找,如果找到id,则记录将更新,否则将插入新记录。

是的,如果您需要为现有学生添加课程,则您可能希望首先从获取的学生对象中获取课程,然后在该课程中添加课程,然后保存…否则,新哈希集将仅包含新课程和以前的记录将被覆盖。



 类似资料:
  • 我有一个包含15个独立ICD列(到)的数据帧,并且希望创建一个变量(0/1),当数字“323”出现在15个ICD列中的任何一个时。 dataframe本身包含30多个变量,如下所示 不完全确定我是否在正确的轨道上,但我编写了以下代码试图完成我的任务,但得到了一个错误: 在Pandas中多列上查找字符串

  • 我有几个具有相同的字段名: 尝试使用枚举类: 得到错误:

  • 我在Parent中提供了一个简单的oneToMany关系,并在Chile Entity类中提供了相应的ManyToOne: 起源: } 儿童班级: 操作类: 示例案例:Status_code Reason_text abc abc1 xyz xyz1 保存表单:Status_code Reason_text abc abc1 xyz xyz1 abc abc1 xy z xyz2 对于任何操作:N

  • 当我映射同一个实体时,就像这里回答的那样: Hibernate与同一实体的多对多关联 在“tbl_friends”表中,我有相同含义的行。例如,我有id=1的用户和id=2的用户。在“tbl_friends”表中,当他们作为朋友链接时,我有两行 使用Hibernate或JPA引用是否可以在一行(1-2或2-1)中建立这种关系?

  • 我有一个运行多个dbs的mysql服务器,这些dbs有一些完全相同的表(别问了,我继承了这个项目): 它们之间还有许多相同的表,此外,DB01、DB02和DB03还有它们独占的其他表。 有没有可能为上面的表结构使用一个模型/服务层,这样我就可以使用Hibernate单独查询每个表? 我尝试的是设置一个抽象超级类(使用@MappedSuperClass),但这需要大量文件继承这个类,唯一的区别是@t

  • 我在实体之间有一对多的关系。执行此JPQL查询时: 从父项选择父项加入父项。孩子在哪里。。。 当一位家长有两个孩子时,我会得到重复的记录,当一位家长有一个孩子时,我只会得到一条记录,当没有孩子时,我会得到一条记录(如果没有孩子,我就没有记录)。请注意,SQL数据库中没有重复的父数据库。 实体声明如下: 为了简洁起见,我省略了很多代码,但这应该会让你对我要做的事情有一个清晰的认识。请注意,关系是在父