我有2个多对多关系的表,所有表都是使用外部脚本在PostgreSQL中创建的。我很难在我的数据模型对象中获得完整的数据。我使用的是Lombok,我的实体类看起来与此类似
@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "TableA")
class TableA {
@Id
private int aId;
private String aValue;
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "TableAB",
JoinColumns = {@JoinColumn(name="TableAId")},
inverseJoinColumns = {@JoinColumn(name="TableBId")})
private Set<TableB> tableBs = new HashSet<>();
}
和
@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "TableB")
class TableB {
@Id
private int bId;
private String bValue;
@ManyToMany(mappedBy = "tableBs")
private Set<TableA> tableAs;
}
当我跑步时:
session.createQuery("FROM TableA a JOIN FETCH a.TableBs", TableA.class).list()
我得到了一个TableA对象的列表,但是这些对象中的tableBs是一个空的Set。我打开了hibernate SQL,我可以看到一个将TableAB连接到TableB的查询,如果我在Intellij数据库控制台中运行该查询,它将返回预期的结果。
我还尝试在解析TableAs的调试器中返回所有具有类似查询的TableB对象,但当不调试或在Docker容器中运行应用程序时,我没有为TableAs返回任何内容。
我正在使用Java 19和Hibernate 6.2.0-Final以及PostgreSQL驱动程序的42.6.0版本。
有什么建议可以让TableA返回填充了TableB的TableA吗?TableB确实与TableC有另一种关系,TableC与其他几个表有一对多关系,我在日志中也看到了对这些表的查询,即使每个关系都被标记为Lazy fetch。
编辑:修复排印错误
1条答案
按热度按时间mklgxw1f1#
在Augusto的评论的帮助下,我解决了这个问题,看起来是@Data注解的问题。我改变了我的类,看起来像下面这样,它工作了。
和