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

@ManyToMany关系无法保存

翟迪
2023-03-14
问题内容

我有一些与@ManyToMany关系有关的实体:

@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(name = "buses_drivers",
        joinColumns = @JoinColumn (name = "driver_id_inner", referencedColumnName = "driver_id"),
        inverseJoinColumns = @JoinColumn (name = "bus_id_inner", referencedColumnName = "bus_id"))
private List<Bus> buses;

@ManyToMany(mappedBy = "buses", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private List<Driver> drivers;

Driver使用某些Bus模型执行保存模型时,一切正常。表buses_drivers存储这些实体的所有键。但是,Bus使用驱动程序保存模型时,表不会更改。我认为inverseJoinColmns映射存在问题。


问题答案:

那是预期的行为。在双向多对多关联中,一侧必须是反侧。在您的情况下,这是Bus一面,因为它包含mappedBy

拥有关系的字段。除非关系是单向的,否则为必需。

这意味着Driver是关联的所有者,并且Hibernate仅在维护关联时检查该侧。



 类似资料:
  • 问题内容: 我遇到了很多对多关系的问题,当我保存模型时(通过管理员),并没有在模型中更新它们,并尝试在附加到信号的函数中或关联的的函数中使用新值。我试图通过使用带有id的get函数在这些函数中重新加载对象,但是它仍然具有旧值。 这是交易问题吗?交易结束时会发出信号吗? 问题答案: 通过管理表单保存模型时,这不是原子交易。首先保存主对象(以确保它具有PK),然后清除 M2M ,并将新值设置为表单中出

  • 在一个项目中,我有以下实体:具有连接到关键字的模板部分的模板。这两种关系都是。一些代码: 然后,我尝试使用给定ID查找与某个模板相关的关键字。我使用使用此谓词执行此操作: 由于某些原因,谓词处理得根本不好。尝试调用方法时出现此错误: 组织.hibernate.hql.internal.ast.QuerySyntax 异常: 模板实体部分目录未映射 [选择关键字身份\nfrom mypackage.

  • 将数据保存到数据库时,我收到异常 org.hibernate.TransientObjectException:对象引用未保存的瞬态实例 - 在刷新之前保存瞬态实例:com.example.api.entity.Product 我有两个实体。 用户.java 产品.java 我有一个JSON需要添加数据。 } 我阅读了这个ex的内容,并试图将Casca eType更改为另一个,但没有帮助。

  • 我试图存储一个manytomany关系,但它没有存储关系。 下面的代码生成了3个表。 这是我发送到服务器的JSON: {“abbreviatedsequence”:“xdf”,“medals”:[{“name”:“purple”,“id”:1},{“name”:“red”,“id”:2}],“sequence”:“xdfree”,“name”:“savier”} java

  • 我想在(您可以将其视为Student)实体和实体之间实现一个@ManyTomany单向的。很简单,一个教室可以有很多学生,而学生可以有很多教室。我希望它是单向的,因为我希望班级只知道它包含什么学生,学生不必知道他们有什么班级。这就是我目前所拥有的: ClassRoom.java Account.java 我通过以下代码保存它(使用Spring JPA): 但我得到了以下错误: 下面是StackTr

  • 与本文类似,我有以下(几乎相同)类: 区别在于我的属性是私有的(使用bean作为实体)。 问题是:我如何创建一个查询来返回一个确定的人的所有项目(在JPQL和/或使用CriteriaQuery)? 我找到了所有其他类似的问题,但没有一个对我有帮助,因为所有这些问题都依赖于从项目到人员的导航(不存在从人员的查询): JPQL多人选择 @许多JPA 2复杂查询 JPA 2.0 CriteriaQuer