【发布时间】:2021-03-07 10:31:21
【问题描述】:
我有三个构成多对多关系的数据库表。这些表名为 Disposition、Disposition_Filter 和 Dispositions_Disposition_Filter。已经提到,Disposition_Disposition_Filter 是“连接表”。
DispositionFilterEntity 类如下所示:
@Getter
@Setter
@ToString
@EqualsAndHashCode
@NoArgsConstructor
@AllArgsConstructor
@Entity(name = "disposition_filter")
public class DispositionFilterEntity {
@GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator")
@GeneratedValue(generator = "uuid2")
@Id
private String id;
@Column private String name;
}
而 DispositionEntity 类看起来像这样:
@Getter
@Setter
@ToString
@EqualsAndHashCode
@Entity(name = "dispositions")
public class DispositionEntity {
@GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator")
@GeneratedValue(generator = "uuid2")
@Id
private String id;
/** @see Disposition */
@Column(nullable = false)
private String name;
@Column(nullable = false)
private String description;
@Column(nullable = false)
private String category;
@Column private boolean active;
@Column private String label;
@Column(name = "hidden_if_agent_not_assigned")
private Boolean hidden;
@Transient
public Disposition getAttributeTypeEnum() {
return Disposition.from(name);
}
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(
name = "dispositions_disposition_filter",
joinColumns = {@JoinColumn(name = "filter_id")},
inverseJoinColumns = {@JoinColumn(name = "disposition_id")})
private List<DispositionFilterEntity> filters;
}
当我在调试器中运行我的代码并请求从数据库中检索所有处置过滤器对象时,我可以看到处置对象上的过滤器成员返回为空,尽管事实上数据确实存在于那种关系。如果有人知道为什么该列表是空的并能指出我正确的方向,我将非常感激。
【问题讨论】:
-
始终查看生成的查询。
-
您在查看 DispositionEntity.filters 列表吗?可能想要检查映射和列表本身,因为它看起来像一个自我引用。由于没有指定连接表的多对多,因此它没有使用您在描述中提到的 3 个表之一。从“过滤器”名称来看,我认为您的意思是让列表包含 DispositionFilterEntity 并且 ManyToMany 应该指定一个 mappedby="dispositions"
-
Shadov,你能发布如何显示生成的查询吗?
-
@Chris 仍然有这个问题,尽管已将 ManyToMany 更新为 DispositionFilterEntities 列表(应该是这样)并且我添加了 mappedBy="dispositions" 但仍然从数据库作为 DispositionFilterEntity 上的一个空列表。
-
您是从数据库中获取实体,还是可能已缓存?如果您只是持久化实体并使用相同的 EntityManager 上下文,请确保您的应用程序设置了关系的双方 - 您得到的只是您设置的内容,除非您强制从数据库刷新。至于 Sql - 检查您的 JPA 提供程序的日志记录。
标签: java spring-boot jpa many-to-many mapstruct