Java 在Hibernate 5中配置一对一关系,以便能够按ID分配子实体

Java 在Hibernate 5中配置一对一关系,以便能够按ID分配子实体,java,hibernate,jpa,orm,Java,Hibernate,Jpa,Orm,假设我们有两个实体类Project和TeamLead,如下所示: @Entity @Table(name = "dbo.projects", schema = "data_source") public class Project { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "project_id") private int project_id; @

假设我们有两个实体类Project和TeamLead,如下所示:

@Entity
@Table(name = "dbo.projects", schema = "data_source")
public class Project {

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

    @Column(name = "project_name")
    private String project_name;

    @OneToOne
    @JoinColumn(name = "lead_id")
    private TeamLead team_lead;

    //Getters and setters
}


@Entity
@Table(name = "dbo.teamleads", schema = "data_source")
public class TeamLead {

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

    @Column(name = "lead_name")
    private String lead_name;

    //Getters and setters
}
在数据库中插入团队领导与项目无关。我们有一个预定义的团队领导列表,每个团队领导可以分配到一个项目

通过web表单创建项目,并将以下JSON发送到控制器:

{"project_name": "Random Name", "techLead": 1} 
// Assuming that we have stored in the database a TeamLead with id 1
我希望将给定的TechLead分配给新创建的项目,但实际上我得到了以下例外情况:

Could not read document: Can not construct instance of models.TeamLead: 
no int/Int-argument constructor/factory method to deserialize from Number value (1)
*注意:如果我将注释从@JoinColumn更改为@PrimaryKeyJoinColumn,它会工作,但是如果删除了项目,那么团队领导也会被删除


我该怎么办?

您没有提到重要的部分:获取JSON、解析JSON、查找由给定ID标识的团队负责人、检查团队负责人是否尚未分配给项目,以及使用数据库中找到的技术负责人创建项目的部分。在控制器中,我使用一个@RequestBody注释自动将Json映射到项目实体,因此我不能在那里进行干预。这就是为什么我希望它是由框架完成的。好吧,你不能。正如错误消息所说,数字
1
无法反序列化为来自数据库的Project实例。至少在您没有认真定制反序列化的情况下。将你的JSON映射到一个与你的JSON结构相同的Java对象,然后按照我在上一篇评论中的建议去做。是的,这会管用的。谢谢你的反馈!