【发布时间】:2020-12-07 02:47:10
【问题描述】:
我正在为我的项目使用 Spring Data JPA(以 hibernate 作为提供程序)并且想知道何时需要实体之间的双向映射?
在我的用例中,我有一个 CategoryGroup 实体,它与 Department 实体具有 @ManyToOne 关系。目前,我在Department 实体中没有对应的@OneToMany 关系。从我可以理解的其他帖子来看,除非我需要通过我的实体/休眠删除,否则我可能不需要这样做。我想知道通过双向关系还能得到什么?
这是我的Department,不包括访问者:
@Entity
@Table(name="dbo.Department")
public class Department
{
@Id
@Column(name="id")
private long id;
@Column(name="name")
private String name;
}
这是CategoryGroup,不包括访问者:
@Entity
@Table(name="dbo.CategoryGroup")
public class CategoryGroup
{
@Id
@Column(name="id")
private long id;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="dept_id")
private Department department;
@Column(name="name")
private String name;
public CategoryGroup()
{
}
public CategoryGroup(String name, Department department)
{
this.name = name;
this.department = department;
}
}
作为后续,我的结构本质上是分层的。 Category 实体与CategoryGroup 实体具有@ManyToOne 关系,并且SubCategory 实体与Category 实体具有@ManyToOne 关系。
如果我继续在关系的父端添加双向关系映射,那么这是否意味着一旦我检索到Department,我最终将获得整个实体层次结构直到SubCategory?对于我的用例来说,这是不可取的。标记与FetchType.LAZY 的关系会缓解这种情况吗?
谢谢
【问题讨论】:
-
您的意思是您正在递归地获取数据以进行双向关系吗?
-
@User-Upvotedon'tsayThanks 实际上,当我在
Department上添加 @OneToMany 注释时出现错误。 @OneToMany(cascade = CascadeType.ALL, mappedBy="department", orphanRemoval=true) 私有列表categoryGroups; -
你能添加有问题的错误吗?
-
@User-Upvotedon'tsayThanks 请求处理失败;嵌套异常是 HttpMessageConversionException:类型定义错误:[简单类型,类 org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer];嵌套异常是 com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class JavassistLazyInitializer 也没有发现创建 BeanSerializer 的属性(为避免异常,禁用 SerializationFeature.FAIL_ON_EMPTY_BEANS)(通过引用链:ArrayList[0]->com .CategoryGroup["department"]->com.Department_$$_jvstbb0_1["handler"])
-
@User-Upvotedon'tsayThanks 不确定我是否需要实现可序列化。另外,我没有覆盖
CategoryGroup中的等于或哈希码。我也在读一些关于那个的东西。
标签: java spring-boot hibernate jpa spring-data-jpa