当前位置: 首页 > 知识库问答 >
问题:

JavaSpring ManyToOne如何加载仅参考

暨弘毅
2023-03-14

我有数据保存在员工的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的外键引用-

我希望能够像在数据库中一样加载PDP,只有员工ID,但我总是得到具有所有属性的整个员工对象。我如何做到这一点?

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

类型定义错误:[简单类型,类org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor];嵌套的异常是com。fasterxml。杰克逊。数据绑定。exc.InvalidDefinitionException:找不到类org的序列化程序。冬眠代理波乔。拜特巴迪。ByteBuddyInterceptor,未发现创建BeanSerializer的属性(为了避免异常,请禁用SerializationFeature.FAIL_ON_EMPTY_BEANS)(通过引用链:java.util.ArrayList[0]-

我做错了什么?


共有3个答案

蒋永宁
2023-03-14

您可以创建getter:

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

或者可以将映射更改为valueprivate Long employeeId

贡建修
2023-03-14

它实际上是ORM的工作方式...映射表(关系端)到实体(对象端)。而实体之间的映射不是通过id而是通过实体引用完成的。因此,要么只是持久化id(因此删除强关系),要么使用投影查询只是取回员工Id。

葛成济
2023-03-14

如果你只想要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..
}
 类似资料:
  • 我有一个包含许多道的项目,每个都由@Repository注释。 还有几个Spring Boot项目,每个项目都有其Spring上下文,可以独立运行,并且它们有对包含Daos的项目的引用。 问题是,我不想在每个项目中将所有的道加载到Spring上下文中。每个Spring启动项目只需要一些指定的道。 我曾经通过在每个项目的XML配置中将Dao类定义为bean来指定Dao类。 现在,我们将转向基于jav

  • 问题内容: 在两个表之间具有映射表的多对多关系中,如何仅加载第二个实体的ID。 以下是解释我要在这里实现的示例。以下是示例架构 注意:为简洁起见,在用户表和页表中还有其他列,此处未包括在内。 用户实体: 我想做的是在类中添加另一个属性,并为此集合中的用户映射所有页面ID。 如何使用Hibernate做到这一点? 问题答案: 在课堂上: 您可以通过遍历返回的集合来获取ID。默认情况下,集合是延迟加载

  • 问题内容: 我在内使用3 ,问题是我在和加载器中加载大数据。在这类设备上,它可以正常工作,但是在低端设备上,则需要很多时间。这主要是因为当我实现时,我将Fragments放在an中,这迫使片段在加载主活动时实例化。我需要的是它只是“加载”第一个片段(主要),而当用户使用时,加载另一个片段。它有什么办法做到这一点?这是我的页面 问题答案: Sun的上述方法对我不起作用(也许对您有用),但是我想我也将

  • 我用的是Report-router-Redux我有这样的路由 在路由中加载与userId参数对应的用户对象的推荐方法是什么? 我的想法(我是新的反应

  • 问题内容: 该useEffect阵营钩将运行在功能上传递的每一个变化。可以对其进行优化,使其仅在所需属性更改时调用。 如果我想从中调用初始化函数而不在更改时再次调用该怎么办?假设我要加载一个实体,但是加载功能不需要组件中的任何数据。我们如何使用钩子做到这一点? 使用钩子可能看起来像这样: 问题答案: 如果只想在初始渲染后运行给定的函数,则可以给它一个空数组作为第二个参数。

  • 我试图在一个网站上获得一个内容列表(若有人感兴趣的话,这一个)。布局最近发生了变化,现在他们不会一次加载所有内容,而是使用magic(可能是js)。我目前正在使用JSoup分析HTML,但我愿意接受建议。 这就是我得到的: 实现此目的的代码: 这是我想看到的(复制从检查元素后,页面加载了所有的内容): 谷歌帮不了什么忙,因为与微调器等相关的所有内容都与javascript有关。 解决方案: 由于J