【问题标题】:Java Spring ManyToOne how to load only referenceJava Spring ManyToOne 如何仅加载参考
【发布时间】:2020-08-04 15:14:55
【问题描述】:

我有员工的Spring和“个人发展计划”数据被持久化。可以说,员工是统治阶级。它看起来像这样:

@Entity(name = "employee")
@Table(name = "EMPLOYEE")
public class Employee {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "EMPLOYEE_ID")
    private int id;

    // etc...
}

个人发展计划如下:

@Entity(name = "pdp")
@Table(name = "PDP")
public class PersonalDevelopmentPlan implements Serializable {

    @Id
    @GeneratedValue
    @Column(name = "PDP_ID")
    private int id;

    @ManyToOne(optional = false)
    @JoinColumn(name = "EMPLOYEE_ID")
    private Employee employee;

    // etc..
}

在数据库中,它存储为来自PDP -> Employee 的外键引用。

我希望能够加载数据库中的 PDP,只有员工 id,但我总是得到具有所有属性的整个 Employee 对象。我该怎么做?

我尝试了@ManyToOne(fetch = FetchType.Lazy),但这在获取时给了我以下错误:

类型定义错误:[简单类型,类 org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor];嵌套的 例外是 com.fasterxml.jackson.databind.exc.InvalidDefinitionException:否 为类找到序列化程序 org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor 并且没有 发现创建 BeanSerializer 的属性(为了避免异常, 禁用 SerializationFeature.FAIL_ON_EMPTY_BEANS)(通过引用 链: java.util.ArrayList[0]->nl.kars.lms.model.pdp.PersonalDevelopmentPlan["employee"]->nl.kars.lms.model.Employee$HibernateProxy$AAwzPX4I["hibernateLazyInitializer"])

我做错了什么?

【问题讨论】:

  • 你可以尝试在Employee类中实现Serializable接口吗?

标签: java spring hibernate many-to-many


【解决方案1】:

如果你只想要 ID,为什么不映射没有关系呢?

@Entity(name = "pdp")
@Table(name = "PDP")
public class PersonalDevelopmentPlan implements Serializable {

    @Id
    @GeneratedValue
    @Column(name = "PDP_ID")
    private int id;

    @Column(name = "EMPLOYEE_ID")
    private Long employeeId;

    // etc..
}

【讨论】:

    【解决方案2】:

    这实际上是 ORM 的工作方式……将表(关系端)映射到实体(对象端)。实体之间的映射不是通过 id 而是通过实体引用完成的。 因此,要么只保留 id(因此删除强关系),要么使用投影查询来获取员工 ID。

    【讨论】:

      【解决方案3】:

      你可以创建getter:

      public Long getEmployeeId(){
       return this.employee.getId();
      }
      

      或者您可以将映射更改为值private Long employeeId

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-06-06
        • 2016-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-13
        • 1970-01-01
        相关资源
        最近更新 更多